2010-09-11 47 views
3

我使用這個:JQuery驗證:Regexing非美國電話號碼

jQuery.validator.addMethod("regex2", function(value, element, param) { 
    return value.match(new RegExp("." + param + "$")); 
}); 

$("#phonenumber").rules("add", { regex2: "[0-9]+"}) 

以驗證電話。電話號碼必須至少爲7位數字,我從elsewhere得到了這個正則表達式,並使用參數minlength=7,但這顯然不合適。應如何進行驗證?

我住在委內瑞拉。所以我認爲this is useless。我該如何改變它?在我的國家,0416-414 33 44應被視爲電話號碼的有效輸入。

+0

末尾是否必須有空格或是否可選?它是否必須只有一個空間,還是可以多於一個?它是否必須是空格字符(U + 0020)還是可以是任何空格? – 2010-09-11 03:03:57

+0

它不一定是空間,我正在改變這個問題,以適應alcuadrado的答案,因爲它似乎是最好的解決方案。 – andandandand 2010-09-11 03:15:17

回答

2

您可能會發現下面的正則表達式是有用的,它基本上是第一條,其在世界任何地方的電話號碼可以包含所有有效的特殊字符(空格,括號,+-.ext),然後計算數字,如果有至少爲7.

$.validator.addMethod('phone', function(value, element) { 
    return this.optional(element) || (/^\d{7,}$/).test(value.replace(/[\s()+\-\.]|ext/gi, '')); 
}); 

與​​一起使用。

2

你不能先修剪,然後驗證,或者只是在此行中$前添加\s?

return value.match(new RegExp("." + param + "$")); 

更改?對於*接受多張空白

+0

'\ b'表示單詞邊界,而不是空白。 – 2010-09-11 03:09:00

+0

你說得對,我的意思是\\ – alcuadrado 2010-09-11 03:13:28

+0

其實,修剪看起來是最好的選擇。我想接受字符 - 和空格供用戶編寫,但不要將它們計爲數字,因爲我在手機中至少需要7位數字。 – andandandand 2010-09-11 03:16:40

3

假設:

  • 空格字符可以是任何空白。
  • 該空間是可選的。
  • 可以有多個空間。
  • 必須至少有七位數字。

然後將"[0-9]+"更改爲"[0-9]{7,}\s*$"

這也似乎"."不正確,應該是一個"^"

+0

這裏的問題是它殺死了驗證。它會將空格計爲數字,用戶可能只在電話字段中放置空格。 – andandandand 2010-09-11 03:13:42

2

你確定那個.在正則表達式的前面嗎?我想知道這是否應該是一個插入^這是$對應:它錨定正則表達式,因此整個字符串必須匹配正則表達式。

您可以爲正則表達式添加空格,但更優雅的解決方案是先修剪它。修剪一個字符串會從開始和結束中刪除空格。任何一項都將工作:

// Trim value before matching against regex. 
return jQuery.trim(value).match(new RegExp("^" + param + "$")); 

// Allow spaces at beginning or end with " *" (space + asterisk). 
return value.match(new RegExp("^ *" + param + " *$")); 

此外,雖然我們在這你可以把這個有點更強大的周圍param添加括號。

// Add parentheses for robustness. 
return jQuery.trim(value).match(new RegExp("^(?:" + param + ")$")); 

這樣,即使參數是this|that,那麼你的新正則表達式也能工作。您希望匹配^(this|that)$而不是^this|that$,因爲後者相當於不正確的(^this)|(that$)

+0

這是有幫助和照亮。我最終在別處使用它。謝謝。 – andandandand 2010-09-11 14:44:36