问题描述
||
请任何人可以帮助我将此正则表达式模式从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+))$\"
如果要以字符串文字形式传递它(通过使用它前面的@
),则无需转义反斜杠。