2012-02-01 119 views
3

我需要一个正则表达式使用JavaScript /适合这些规则jQuery的使用...我的JavaScript regex/regex语法有什么问题?

  • 将包括10位
  • 如果有一个领导1+1应该忽略它
  • 有效字符允许在该领域是... 0-9(),并-

我发现了一个正则表达式在Snipplr(第一个),但它不是WO rking。首先,我甚至不确定该正则表达式是否符合我的规则。其次,它允许输入像&^%$$#%^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; 
}) 
+0

你是否在找它以匹配任何电话号码?如果包含破折号和括号,则有相当多的电话号码格式可供选择,而当您使用国际号码和分机号时则更多。否则你的代码看起来很好。正则表达式也起作用。 – 2012-02-01 19:16:24

回答

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()){ ... } 
+0

甜。这解决了我与我的代码有关的语法问题。当我使用Google Chrome浏览器进行检查时,我不会再犯错。现在我只需要一个可用的正则表达式。谢谢! – Kirkland 2012-02-01 20:55:06

2

如果有一个领先的1或+1应该忽略它 将包括10位 有效允许在现场字符是... 0-9,(),以及 -

这可能与像一个表达式匹配:

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

Oooooo,那很接近。它比我尝试的另一个更近。但是,“如果有领先的1或+1应该忽略”规则不起作用。例如,我输入了......(888)000-0000',它确实有效,但是当我添加这样一个'1' ... 1(888)000-0000'时,它回来无效。 1应该被忽略。它也说这些是无效的,但它们应该是...... +1(888)000-0000'和'18880000000'和'+ 18880000000'。 – Kirkland 2012-02-01 21:04:04

+0

我知道了......'/^[\ +?1] * [(] *(?:\ d [) - ] *){10} $ /'...让用户放一个'1'或在开头忽略它,允许'('跟随'1'或'+ 1'或者开始并忽略它,允许在字符串中的某个位置放一个')'并忽略它,允许' -'并忽略它,只允许其他字符的数字并将字符串限制为其中的10个。这不是100%完美...例如:这是有效的'62)34567890' ...但它非常接近,这就是我所需要的。谢谢您的帮助。 – Kirkland 2012-02-01 21:58:15

+0

@Kirkland,目前还不清楚“it”是指什么。更新了答案。 – Qtax 2012-02-01 22:49:23