簡體   English   中英

使用正則表達式驗證我們的電話號碼

[英]Validate us number with regular expression

我正在freecodecamp上進行練習,以驗證我們的電話號碼。

用戶可以選擇任何方式填寫表單字段,只要它是有效的美國號碼即可。 以下是美國號碼的所有有效格式:

555-555-5555,(555)555-5555,(555)555-5555、555 555 5555、5555555555、1 555 555 5555

我正在使用RegEx來測試輸入。我在regex101上鍵入這些表達式

(([1]\s)?(\()*(\d{3})(-|\)|\)\s|\s)*(\d{3})(-|\s)*\d{4})

測試輸入如下:

2 **(757)622-7382 **返回true

-1(757)622-7382返回true

10 **(757)622-7382 **返回true

我如何測試前導2,減號和10。

我建議您看一下OWASP驗證正則表達式存儲庫,因為它們是驗證和持續更新的主題

對於美國電話(在撰寫本文時),建議的RegEx為^\\D?(\\d{3})\\D?\\D?(\\d{3})\\D?(\\d{4})$

((-)?\\d{0,2} )? 注意{0,2}之后的space

(-)?       // may begin with a minus
(\d{1,2})?   // may have 1 or 2 digits before the actual number
( )?       // may have a space after that

演示

這是您的正則表達式的修改版本,現在可以與新的電話格式匹配:

^[-+]?(?:\d{1,2}\s)?\(*(?:\d{3})(?:-|\)|\)\s|\s)*\d{3}(?:-|\s)*\d{4}$

觀看演示

注意我刪除了捕獲組(我懷疑您是否需要它們,並且它們會增加額外的開銷),並在數字之前添加了可選的+- 同樣,由於限制量 {1,2}\\d{1,2}匹配1或2位數字

可能會晚一點,但是這是解決方法。

/^(1\s?)?(\(\d{3}\)|\d{3})[\s\-]?\d{3}[\s\-]?\d{4}$/;

您確實希望表達式的開頭有^來匹配字符串的第一個字符,並且您想在結尾使用$來使表達式知道這是結尾。

您可以在以下github github鏈接上查看以上答案以及另一種方法

暫無
暫無

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

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