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

时间:2011-06-15 15:14:48

标签: javascript regex c#-4.0

请有人帮我将这个正则表达式模式从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 {
    // ...
}

2 个答案:

答案 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+))$"

如果您要将其作为字符串文字传递(通过使用前面的@),那么您不需要转义反斜杠。