2012-02-01 42 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