【问题标题】:What's wrong with my JavaScript regex / regex syntax?我的 JavaScript 正则表达式/正则表达式语法有什么问题?
【发布时间】:2012-02-24 11:24:50
【问题描述】:

我需要一个正则表达式与符合这些规则的 javascript/jquery 一起使用...

  • 它将包括 10 位数字
  • 如果有前导 1+1 则应忽略
  • 字段中允许的有效字符是...0-9()-

我在Snipplr(第一个)找到了一个正则表达式,但它不起作用。首先,我什至不确定该正则表达式是否符合我的规则。其次,它允许像&^%$$#%^adfafsd 这样的输入。我相信错误出在我的代码中,而不是正则表达式。例如,表达式周围应该有引号吗?

这是验证电话字段的代码...

$('#phone').bind('blur', function() {
    var pattern = new RegExp("^(?:\+?1\s*(?:[.-]\s*)?)?(?:\(\s*([2-9]1[02-9]|[2-9][02-8]1|[2-9][02-8][02-9])\s*\)|([2-9]1[02-9]|[2-9][02-8]1|[2-9][02-8][02-9]))\s*(?:[.-]\s*)?([2-9]1[02-9]|[2-9][02-9]1|[2-9][02-9]{2})\s*(?:[.-]\s*)?([0-9]{4})$");
    if(pattern.test($('#phone').val())){
        $("#phone").addClass("error");
        return false;
    }else{
        $("#phone").removeClass("error");
        return true;
    }
    return true;
})

【问题讨论】:

  • 您是否正在寻找它来匹配任何电话号码?当您包含破折号和括号时,电话号码格式有很多可能性,当您进入国际号码和分机时,甚至更多。否则你的代码看起来不错。正则表达式也可以。

标签: javascript jquery regex syntax


【解决方案1】:

当您不使用文字形式 ( /[regex]/ ) 时,您需要转义正则表达式字符串。试试这个:

var regex = /^(?:\+?1\s*(?:[.-]\s*)?)?(?:\(\s*([2-9]1[02-9]|[2-9][02-8]1|[2-9][02-8][02-9])\s*\)|([2-9]1[02-9]|[2-9][02-8]1|[2-9][02-8][02-9]))\s*(?:[.-]\s*)?([2-9]1[02-9]|[2-9][02-9]1|[2-9][02-9]{2})\s*(?:[.-]\s*)?([0-9]{4})$/;

if(regex.test($('#phone').val()){ ... }

【讨论】:

  • 甜蜜。这解决了我在代码中遇到的语法问题。当我使用 Google Chrome 进行检查时,我不再遇到错误。现在我只需要一个有效的正则表达式。谢谢!
【解决方案2】:

如果有前导 1 或 +1,则应忽略它 它将包括 10 位数字 字段中允许的有效字符为... 0-9、() 和 -

这可以与如下表达式匹配:

/^(?:\+?1)?[()-]*(?:\d[()-]*){10}$/

【讨论】:

  • 噢噢噢,很接近了。它比我尝试的另一个更接近。但是,“如果有前导 1 或 +1,则应忽略它”规则不起作用。例如,我输入了...(888)000-0000,它确实有效,但是当我像这样添加1...1(888)000-0000 它返回无效。 1 应该被忽略。它还说这些是无效的,但它们应该是......+1(888)000-000018880000000+18880000000
  • 我知道了... /^[\+?1]*[(]*(?:\d[)-]*){10}$/ ...允许用户在开头放置1+1 并忽略它,允许在1 之后添加(+1 或开始并忽略它,允许在字符串中的某处使用) 并忽略它,允许- 并忽略它,只允许其他字符的数字并将字符串限制为10 个。这不是 100% 完美...例如:这是有效的 62)34567890 ...但它真的很接近,这就是我所需要的。感谢您的帮助。
  • @Kirkland,不清楚“它”指的是什么。更新了答案。
猜你喜欢
  • 2013-09-13
  • 2016-03-12
  • 2011-08-23
  • 2011-02-05
  • 1970-01-01
相关资源
最近更新 更多