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

时间:2012-02-01 19:03:16

标签: javascript jquery regex syntax

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

2 个答案:

答案 0 :(得分:4)

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

答案 1 :(得分:2)

  

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

这可以与表达式匹配:

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