请任何人可以帮助我将此正则表达式模式从javascript转换为c#

问题描述

|| 请任何人可以帮助我将此正则表达式模式从javascript转换为c#
 var phonePattern = /^(([^\\.\\-\\,a-wy-z]([\\(]?(\\+|[x])?\\d+[\\)]?)?[\\s\\.\\-\\,]?([\\(]?\\d+[\\)]?)?[\\s\\.\\-\\,]?(\\d+[\\s\\.\\-\\,]?)+[^\\.\\-\\,a-z])|((\\+|[x])?\\d+))$/i
我需要验证电话号码,我将从文本框中获取值,并将其与正则表达式模式进行比较。我需要转换此模式,特别是因为该模式将解决英国,美国,欧元等几乎所有国家/地区的电话模式,印度等 这是我的C#代码
Regex REphone = new Regex(@\" c# pattern here\");
if (REphone.IsMatch(TextBox_Phone.Text)) {
    // ...
} else {
    // ...
}
    

解决方法

        
new Regex(@\"^(([^\\.\\-\\,a-wy-z]([\\(]?(\\+|[x])?\\d+[\\)]?)?[\\s\\.\\-\\,]?([\\(]?\\d+[\\)]?)?[\\s\\.\\-\\,]?(\\d+[\\s\\.\\-\\,]?)+[^\\.\\-\\,a-z])|((\\+|[x])?\\d+))$\",RegexOptions.IgnoreCase);
模式本身是相同的,但用
@\"
\"
而不是
/
/
引用。
RegexOptions.IgnoreCase
使匹配不区分大小写,这等效于JavaScript regex文字末尾的
i
标志。     ,        JavaScript使用ѭ5来分隔正则表达式,而C#不使用分隔符(将其作为字符串传递,因此从技术上讲,您可以说它由双引号ѭ4分隔)。 另外,在C#字符串中,请记住,您必须将反斜杠从
\\
转为
\\\\
。 因此,您的正则表达式表达式如下所示:
\"^(([^\\\\.\\\\-\\\\,a-wy-z]([\\\\(]?(\\\\+|[x])?\\\\d+[\\\\)]?)?[\\\\s\\\\.\\\\-\\\\,]?([\\\\(]?\\\\d+[\\\\)]?)?[\\\\s\\\\.\\\\-\\\\,]?(\\\\d+[\\\\s\\\\.\\\\-\\\\,]?)+[^\\\\.\\\\-\\\\,a-z])|((\\\\+|[x])?\\\\d+))$\"
如果要以字符串文字形式传递它(通过使用它前面的
@
),则无需转义反斜杠。