验证为电话号码

时间:2010-01-22 09:11:48

标签: javascript regex

我正在尝试将字符串验证为电话号码(数字和某些特殊字符)。我使用了现有的代码片段:http://snippets.dzone.com/posts/show/597这似乎是正确的。但每次string.match(format)都会返回null,这会导致显示错误消息。

var format = /^(\+\d)*\s*(\(\d{3}\)\s*)*\d{3}(-{0,1}|\s{0,1})\d{2}(-{0,1}|\s{0,1})\d{2}$/;
var string = jQuery(".validate_phone").val();
if (string.match(format) != true) {
  // some error message
}

我已经检查过,string填充了预期值。

以下值应匹配:
339-4248
339-42-48
339 42 48
339 4248
3394248个
(095)3394248
(095)3394248
+7(095)3394248
+7(095)3394248
+7(095)3394248
+7(095)3394248

其他所有内容都应显示错误消息。

这段代码有什么问题?提前谢谢!

更新:这是一个测试用例 http://labuschin.com/material/phone

3 个答案:

答案 0 :(得分:3)

Facebook的一位朋友帮我成功了:

var format = /(\+\d)*\s*(\(\d{3}\)\s*)*\d{3}(-{0,1}|\s{0,1})\d{2}(-{0,1}|\s{0,1})\d{2}/;  
var nr= prompt("Phone number", "");    
if (nr.match(format) == null) {
  alert ("incorrect");  
} else {  
  alert ("correct");  
} 

更改了if-clause并删除了开头的^和结尾的$。在这里工作:http://labuschin.com/material/phone

答案 1 :(得分:0)

有效的正则表达式为:(\+\d\s*)?(\(\s*\d{3}\s*\)\s*)?\d{3}([- ]?\d{2}){2}

但是,match()在非匹配项上返回null,在匹配项上返回捕获值的数组 - 它永远不会返回true。您可能对返回匹配位置的search()更感兴趣,或者如果正则表达式不匹配则更感兴趣。 E.g:

var format = /^(\+\d\s*)?(\(\s*\d{3}\s*\)\s*)?\d{3}([- ]?\d{2}){2}$/;
var string = jQuery(".validate_phone").val();
if (string.search(format) == -1) {
  // some error message
}

答案 2 :(得分:0)

也许......你不应该使用“string”作为var名称。

var format = /^(\+\d)*\s*(\(\d{3}\)\s*)*\d{3}(-{0,1}|\s{0,1})\d{2}(-{0,1}|\s{0,1})\d{2}$/;
var nr= prompt("Phone number", "");
if (!nr.match(format)) {
alert ("incorrect");
} else {
alert ("correct");
} 

适合我。