请有人帮我将这个正则表达式模式从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 {
// ...
}
答案 0 :(得分:3)
new Regex(@"^(([^\.\-\,a-wy-z]([\(]?(\+|[x])?\d+[\)]?)?[\s\.\-\,]?([\(]?\d+[\)]?)?[\s\.\-\,]?(\d+[\s\.\-\,]?)+[^\.\-\,a-z])|((\+|[x])?\d+))$",
RegexOptions.IgnoreCase);
模式本身是相同的,但在@"
,"
而不是/
,/
之间引用。
RegexOptions.IgnoreCase
使匹配不区分大小写,这相当于JavaScript正则表达式文字末尾的i
标记。
答案 1 :(得分:1)
JavaScript使用/
分隔正则表达式,而C#不使用分隔符(您将其作为字符串传递,因此从技术上讲,您可以说它由双引号"
分隔)。
此外,在C#字符串中,请记住您必须将\
的反斜杠转义为\\
。
所以你的正则表达式看起来像这样 -
"^(([^\\.\\-\\,a-wy-z]([\\(]?(\\+|[x])?\\d+[\\)]?)?[\\s\\.\\-\\,]?([\\(]?\\d+[\\)]?)?[\\s\\.\\-\\,]?(\\d+[\\s\\.\\-\\,]?)+[^\\.\\-\\,a-z])|((\\+|[x])?\\d+))$"
如果您要将其作为字符串文字传递(通过使用前面的@
),那么您不需要转义反斜杠。