2010-05-20 68 views
4

我试图验证美国手机号码,因为我正在使用预构建的JavaScript验证库,我只是将this正则表达式验证替换为验证库附带的前一个验证库。正则表达式|验证错误

先前验证的正则表达式:

"telephone":{ 
"regex":"/^[0-9\-\(\)\ ]{10,10}$/", 
"alertText":"* Invalid phone number"}, 

这就像2126661234但不是在美国的标准。

后,我改变了:

"telephone":{ 
"regex":"/^[2-9]\d{2}-\d{3}-\d{4}$/", 
"alertText":"* Invalid phone number"}, 

现在每个项目我得到一个错误,即使我进入212-666-1234我真的不知道什么是错的,所以我希望一些帮助。

+1

使用regexlib的+1。你确定以前的版本在字符串中有斜杠吗? '“/.../”' – Kobi 2010-05-20 06:48:00

+0

是的,它有斜杠 – Switch 2010-05-20 06:53:45

回答

4

你需要躲避反斜线

"telephone":{ 
"regex":"/^[2-9]\\d{2}-\\d{3}-\\d{4}$/", 
"alertText":"* Invalid phone number"}, 

/^[2-9]\d{2}-\d{3}-\d{4}$/只能在正则表达式文字作为

var r = /^[2-9]\d{2}-\d{3}-\d{4}$/; 

当您使用字符串初始化正则表达式,你应该逃避反斜杠

var r = new RegExp("^[2-9]\\d{2}-\\d{3}-\\d{4}$"); 
+0

好的。这也解释了为什么原始*似乎*工作;它看起来像'[0-9-()]' - JavaScript字符串倾向于忽略错误转义的字符,并且'-'成为范围后的字面值,很像'[a-z-]'。 – Kobi 2010-05-20 07:05:03

+0

谢谢你的工作.. – Switch 2010-05-20 07:07:57

0

看起来像原来的正则表达式逃脱-标志,像这样:\-

我没有看到你在你的第二个例子中这样做。

+0

这是在一个字符类中,其中'-'表示范围:'[a-z]'对'\ d- \ d'。正则表达式似乎没问题。 – Kobi 2010-05-20 06:50:41

+0

那么这有什么问题? – Switch 2010-05-20 06:58:14

+0

@Kobi,MMRUser:示例1中的_second_短划线用反斜杠转义,与a-z范围无关。所以,我说你的正则表达式应该是这样的:/^[2-9] \ d {2} \ - \ d {3} \ - \ d {4} $/ – 2010-05-20 07:02:52