【问题标题】:please can anyone help me to convert this regular expression pattern from javascript to c#请任何人都可以帮我将此正则表达式模式从 javascript 转换为 c#
【发布时间】:2011-06-15 15:14:48
【问题描述】:

谁能帮我把这个正则表达式模式从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 {
    // ...
}

【问题讨论】:

  • 到目前为止,您为 .NET 正则表达式尝试了什么?它在什么方面不起作用?
  • Regex REphone = new Regex(@"^(([^\.\-\,a-wy-z]([(]?(\+|[x])?\d+[ )]?)?[\s\.\-\,]?([(]?\d+[)]?)?[\s\.\-\,]?(\d+[\s\.\- \,]?)+[^\.\-\,a-z])|((\+|[x])?\d+))$",我尝试了这个,但没有工作总是继续,否则即使我输入正确的价值观

标签: javascript regex c#-4.0


【解决方案1】:
new Regex(@"^(([^\.\-\,a-wy-z]([\(]?(\+|[x])?\d+[\)]?)?[\s\.\-\,]?([\(]?\d+[\)]?)?[\s\.\-\,]?(\d+[\s\.\-\,]?)+[^\.\-\,a-z])|((\+|[x])?\d+))$",
        RegexOptions.IgnoreCase);

模式本身是相同的,但在@"" 之间引用而不是//

RegexOptions.IgnoreCase 使匹配不区分大小写,这相当于 JavaScript 正则表达式文字末尾的 i 标志。

【讨论】:

  • @fatma mansour:如果 Daniel 的回答令人满意地解决了您的问题,您真的应该考虑将其标记为已接受。
【解决方案2】:

JavaScript 使用 / 分隔正则表达式,而 C# 不使用分隔符(您将其作为字符串传递,因此从技术上讲,您可以说它由双引号 " 分隔)。

此外,请记住,在 C# 字符串中,您必须将反斜杠从 \ 转义为 \\

所以你的正则表达式看起来像这样 -

"^(([^\\.\\-\\,a-wy-z]([\\(]?(\\+|[x])?\\d+[\\)]?)?[\\s\\.\\-\\,]?([\\(]?\\d+[\\)]?)?[\\s\\.\\-\\,]?(\\d+[\\s\\.\\-\\,]?)+[^\\.\\-\\,a-z])|((\\+|[x])?\\d+))$"

如果您要将其作为字符串文字传入(通过在其前面使用 @),则无需转义反斜杠。

【讨论】:

  • 我试过 @ 和 \\ 它对我不起作用,这个语法在 c# 中有效吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-10-02
  • 1970-01-01
  • 2023-03-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多