我的 JavaScript 正则表达式/正则表达式语法有什么问题?

发布于 2025-01-01 15:48:29 字数 972 浏览 0 评论 0 原文

我需要一个正则表达式与符合这些规则的 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;
})

I need a regex to use with javascript/jquery that fits these rules...

  • it will include 10 digits
  • if there is a leading 1 or +1 it should be ignored
  • valid characters allowed in the field are... 0-9,(), and -

I found a regex at Snipplr (the first one), but its not working. First of all, I'm not even sure if that regex fits my rules. Secondly, its allowing inputs like &^%$$#%^adfafsd. I believe the error is in my code not the regex. For example, are there supposed to be quotes around the expression?

Here is the code that is supposed to be validating the phone field...

$('#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;
})

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

哽咽笑 2025-01-08 15:48:29

当您不使用文字形式( /[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()){ ... }

When you're not using the literal form ( /[regex]/ ), you need to escape the regex string. Try this instead:

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()){ ... }
风筝在阴天搁浅。 2025-01-08 15:48:29

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

可以与如下表达式匹配:

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

if there is a leading 1 or +1 it should be ignored
it will include 10 digits
valid characters allowed in the field are... 0-9,(), and -

That could be matched with an expression like:

/^(?:\+?1)?[()-]*(?:\d[()-]*){10}$/
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文