2010-05-20 69 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