验证为电话号码

验证为电话号码

问题描述:

我试图验证一个字符串作为电话号码(数字和某些特殊字符)。我使用了一个现有的代码片段: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
(095)3394248
(095)3394248
7 (095)3394248
7(095)3394248
7(095)3394248
7(095)3394248

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

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

更新:下面是测试情况http://labuschin.com/material/phone

+0

什么是“期望值”样本? – 2010-01-22 09:15:43

+0

你可以发表一些你做或不想匹配的例子吗?马上我看到国际号码没有正确处理。 – 2010-01-22 09:16:23

+0

一些示例要匹配什么以及哪些不会有帮助。正则表达式非常复杂。 – 2010-01-22 09:20:47

一位朋友在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"); 
} 

改变,如果从句和和移除^在开始和结束时的$。在此工作:http://labuschin.com/material/phone

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

但是,match()返回null上的非匹配项和匹配项上的捕获值数组 - 它永远不会返回true。如果正则表达式不匹配,您可能对search()返回匹配位置或-1。例如:

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 
} 
+0

对不起,在我的测试用例中不起作用。一切仍然“不正确” – 2010-01-22 09:59:05

也许......你不应该使用“字符串”作为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"); 
} 

适合我。

+0

我在这里试过:http:// labuschin。com/material/phone 不幸的是它不能工作:( – 2010-01-22 11:06:09

+0

你的在线版本适用于我(FF,Chrome,Safari,地狱 - 即使在IE中) 测试“+7(095)3394248”和其他一些值... 但是,当我试图复制并粘贴一个数字时,我得到了一个验证错误,因为最后有一个额外的空白。也许你应该检查一下.. 如果你只是键入一些数字,让你的字符串足够长(7分钟) – Orange 2010-01-22 11:18:05