簡體   English   中英

正則表達式電話號碼驗證

[英]Regular Expression Phone Number Validation

我為黎巴嫩電話號碼編寫了這個正則表達式,基本上它應該以

00961+961國際代碼然后是區號

可以是從09 的任何數字或蜂窩代碼“70”“76”

“79”,6位數字恰好

我已經編寫沒有6位數的部分以下REG例如

^(([0][0]|[+])([9][6][1])([0-9]{1}|[7][0]|[7][1]|[7][6]|[7][8]))$

當我想添加代碼以確保表達式中只允許多出 6 位數字時:

^(([0][0]|[+])([9][6][1])([0-9]{1}|[7][0]|[7][1]|[7][6]|[7][8])([0-9]{6}))$

它似乎接受 5 或 6 位數字而不是 6 位數字

我很難找出問題所在

使用這個正則表達式((00)|(\\+))961((\\d)|(7[0168]))\\d{6}

這是我會用的。

/^(00|\+)961(\d|7[069])\d{6}$/
  • 00或+
  • 961
  • 一位數字或70或76或79
  • 一個6位數字

[0-9]{1}也將匹配蜂窩代碼7x,因為7介於0和9之間。這意味着“5位蜂窩數”將匹配7位數和6位數。

嘗試

 /^(00961|\+961)([0-9]|70|76|79)\d{6}$/.test( phonenumber );
//^                                    start of string
// ^^^^^^^^^^^^^                       00961 or +0961
//              ^^^^^^^^^^^^^^^^       a digit 0 to 9 or 70 or 76 or 79
//                              ^^^^^  6 digits
//                                   ^ end of string

正如@ellak指出的那樣,酒窖代碼正在形成一個陷阱:

/^((00)|(\+))961((\d)|(7[0168]))\d{6}$/.test("009617612345"); // true

這里的代碼應該像這樣打破: 00 961 76 12345

但RegEx實際上打破了它: 00 961 7 612345 ,因為7匹配\\d ,其余的組合,恰好是6位數,並匹配。

我不確定這是否真的有效,但我想這不是你想要的,否則問題中的RegEx應該有效。

這是一個有點長的RegEx,可以避免陷阱:

/^(00|\+)961([0-68-9]\d{6}|7[234579]\d{5}|7[0168]\d{6})$/

一些測試結果:

/(00|\+)961([0-68-9]\d{6}|7[234579]\d{5}|7[0168]\d{6})/.test("009617012345")
  false
/(00|\+)961([0-68-9]\d{6}|7[234579]\d{5}|7[0168]\d{6})/.test("009618012345")
  true
/(00|\+)961([0-68-9]\d{6}|7[234579]\d{5}|7[0168]\d{6})/.test("009617612345")
  false
/(00|\+)961([0-68-9]\d{6}|7[234579]\d{5}|7[0168]\d{6})/.test("0096176123456")
  true

就在最近,黎巴嫩電信部更改了 IMS 上的區號。 所以當前的 Regex 匹配器變成了:

^(00|\+)961[ -]?(2[1245789]|7[0168]|8[16]|\d)[ -]?\d{6}$
  • 前綴: 00+
  • 國家代碼: 961
  • 區號:1位或2位; 包括2 *、 7 *、 8 *...,或舊 IMS 網絡上 Ogero 號碼的一位數字,以0 * 開頭,最后是舊的移動線路,以03開頭。
  • 6 位數字

the961.com 上的新聞

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM