Validate US Telephone Numbers
Return true if the passed string is a valid US phone number.
The user may fill out the form field any way they choose as long as it is a valid US number. The following are examples of valid formats for US numbers (refer to the tests below for other variants):555-555-5555 (555)555-5555 (555) 555-5555 555 555 5555 5555555555 1 555 555 5555
For this challenge you will be presented with a string such as
800-692-7753
or8oo-six427676;laskdjf
. Your job is to validate or reject the US phone number based on any combination of the formats provided above. The area code is required. If the country code is provided, you must confirm that the country code is 1. Return true if the string is a valid US phone number; otherwise return false.
Here are some helpful links:
檢查傳入的字符串是否為美國(guó)電話(huà)號(hào)碼,并返回真假和媳。
由所給示例可以看出涵紊。美國(guó)電話(huà)一共分為3個(gè)部分:
- 第一部分是可以沒(méi)有的國(guó)家代碼,固定為1
- 第二部分是區(qū)號(hào)蛉签,長(zhǎng)度固定為3
- 第三部分是電話(huà)號(hào)碼胡陪,長(zhǎng)度為7
對(duì)于電話(huà)號(hào)碼,用正則匹配是最簡(jiǎn)單的碍舍。
這里先匹配電話(huà)號(hào)碼柠座。
\d{7}
能識(shí)別連續(xù)7位數(shù)的電話(huà)號(hào)碼,但示例中有分隔為3+4形式的號(hào)碼片橡,因而改寫(xiě)為符合3+4形式的正則妈经,這里暫且假定分隔符為1個(gè)空格。
\d{3} \d{4}
能識(shí)別被空格分隔的7位電話(huà)號(hào)碼了,但還不夠吹泡,現(xiàn)在在加上沒(méi)有空格和有短橫線(xiàn)的情況录煤。
到這就已經(jīng)完成電話(huà)號(hào)碼了,接下來(lái)做區(qū)號(hào)荞胡。
區(qū)號(hào)有且只有3位數(shù)妈踊,但可能被()
包裹著,與電話(huà)號(hào)碼間可能隔著空格泪漂、短橫線(xiàn)抑或什么都沒(méi)有廊营。這里先處理可能被()
包裹的情況。
\(\d{3}\)
匹配到了()
以及里面的內(nèi)容萝勤,但有的區(qū)號(hào)并沒(méi)有被括號(hào)包裹露筒。在加上這種情況。
現(xiàn)在將區(qū)號(hào)和電話(huà)號(hào)碼連在一起敌卓。
行百里者半于九十慎式,這里已經(jīng)完成一半了,最后來(lái)考慮國(guó)家代碼的問(wèn)題趟径。
美國(guó)的國(guó)家代碼為1瘪吏,先考慮是否以1開(kāi)頭。
考慮開(kāi)頭的1不存在的情況蜗巧。
由示例得出國(guó)家代碼與區(qū)號(hào)之間可能有1個(gè)空格掌眠。
先是有空格的。
然后是沒(méi)有空格的幕屹。
現(xiàn)在匹配美國(guó)電話(huà)號(hào)碼的正則表達(dá)式已經(jīng)基本完成了蓝丙。再考慮下添加了非法字符的情況。上面的正則能匹配到前一部分是美國(guó)電話(huà)的號(hào)碼望拖,但不能避免末尾添加了其他字符的情況渺尘。
因此還需要加上末尾的判斷。
大功告成∷得簦現(xiàn)在編寫(xiě)函數(shù)來(lái)測(cè)試一下數(shù)據(jù)鸥跟。
function telephoneCheck(str) {
return /^1? ?(\(\d{3}\)|\d{3})[ |-]?\d{3}[ |-]?\d{4}$/.test(str);
}
測(cè)試結(jié)果如下圖。
測(cè)試結(jié)果顯示編寫(xiě)的函數(shù)如期運(yùn)行像云,這樣FCC的高級(jí)算法第一題就完成了锌雀。
PS. 圖中所用正則測(cè)試工具為開(kāi)源中國(guó)的在線(xiàn)正則表達(dá)式測(cè)試