2017-06-02 68 views
0

我很努力在正則表達式中創建If/Else語句以a)驗證電話號碼格式,然後b)使某組電話號碼失效。正則表達式:如果/否則HTML表單驗證中的條件

我目前有:

<input type="tel" name="mobilePhone" pattern="^(?:\+?61|0)4 ?(?:(?:[01] ?[0-9]|2 ?[0-57-9]|3 ?[1-9]|4 ?[7-9]|5 ?[018]) ?[0-9]|3 ?0 ?[0-5])(?: ?[0-9]){5}$"> 

靶向以下電話號碼格式(手機號碼澳大利亞)的一種方式:

0414570776 0414 570 776

但是我們有很多的0411 111 111或者0400000000用戶條目,我想在提交之前嘗試並清除掉,但我似乎無法正確完成。

我想使一系列數字無效,但在這個例子中,這兩個就足夠了:0411 111 1110400000000

任何幫助將不勝感激。

謝謝

+0

已經超出了'模式的目的結束=''屬性,但在技術上會做一個['(?!...)'負向預測](http://www.regular-expressions.info/lookaround.html)。 – mario

+0

我的直覺告訴我,這是在提交之後。用一個單數正則表達式來做這件事是一個維護者的噩夢,在服務器端你可以簡單地保存一張無效數字表,你可以檢查它。 –

+0

你也可以在客戶端使用JavaScript來檢查數字列表,例如,如果你想把服務器的負載降到最低,那麼潛在的黑客就很容易看到源頭並找到漏洞。 –

回答

0

解決方案

var re = /^\s*\+?04(\d)(?!\1\s*\1{3}\s*\1{3})\d\s*\d{3}\s*\d{3}\s*$/; 
 

 
console.log(re.test('0411111111') ? 'pass' : 'fail', '"0411111111"'); 
 
console.log(re.test('0411 111 111') ? 'pass' : 'fail', '"0411 111 111"'); 
 
console.log(re.test('0400 000 000') ? 'pass' : 'fail', '"0400 000 000"'); 
 
console.log(re.test('0412345678') ? 'pass' : 'fail', '"0412345678"'); 
 
console.log(re.test('0412 345 678') ? 'pass' : 'fail', '0412 345 678'); 
 
console.log(re.test('+0412345678') ? 'pass' : 'fail', '"+0412345678"'); 
 
console.log(re.test('+0412 345 678') ? 'pass' : 'fail', '"+0412 345 678"'); 
 
console.log(re.test('0412 345 678') ? 'pass' : 'fail', '"0412 345 678"'); 
 
console.log(re.test('+0412 345 678') ? 'pass' : 'fail', '"+0412 345 678"'); 
 
console.log(re.test('  +0412  345  678  ') ? 'pass' : 'fail', '"  +0412  345  678  "');
<!DOCTYPE> 
 
<html> 
 
    <head></head> 
 
    <body> 
 
    <form> 
 
     <input type='tel' name='mobilePhone' pattern='^\s*\+?04(\d)(?!\1\s*\1{3}\s*\1{3})\d\s*\d{3}\s*\d{3}\s*$' placeholder='enter phone number'> 
 
     <input type='submit'> 
 
    </form> 
 
    </body> 
 
</html>

說明

  • ^\s* - 從零個或多個空白字符
  • \+? - 接着任選的+
  • 04 - 接着是字面04
  • (\d) - 接着是單個數字(第1組)
  • (?!...) - 後面沒有

    • \1 - 組1的值
    • \s* - 後跟零個或多個空白字符
    • \1{3} - 接着3出現組1
    • \s*的值 - 後跟零個或多個空白字符
    • \1{3} - 接着3出現的值的組1
  • \d - 接着是單個數字

  • \s* - 後跟零個或多個空白字符
  • \d{3} - 接着3出現組1
  • \s*的值 - 後跟零個或多個空白字符
  • \d{3} - 接着3出現的值的第1組
  • \s*$ - 與零個或多個空白字符
+0

非常感謝Shammel-lee。今天要測試一下(一直在旅行)並回復你以前的評論。再次感謝你。 – tmnb