題目
Validate US Telephone Numbers
如果傳入字符串是一個有效的美國電話號碼,則返回true.
用戶可以在表單中填入一個任意有效美國電話號碼. 下面是一些有效號碼的例子(還有下面測試時用到的一些變體寫法):
555-555-5555
(555)555-5555
(555) 555-5555
555555 5555
5555555555
1 555 555 5555
在本節中你會看見如
800-692-7753
or8oo-six427676;
laskdjf
這樣的字符串. 你的任務就是驗證前面給出的字符串是否是有效的美國電話號碼. 區號是必須有的. 如果字符串中給出了國家代碼, 你必須驗證其是1. 如果號碼有效就返回true; 否則返回false.
當你遇到困難的時候,記得查看錯誤提示、閱讀文檔、搜索、提問。
這是一些對你有幫助的資源: RegExp
telephoneCheck("555-555-5555") 應該返回一個布爾值.
telephoneCheck("1 555-555-5555") 應該返回 true.
telephoneCheck("1 (555) 555-5555") 應該返回 true.
telephoneCheck("5555555555") 應該返回 true.
telephoneCheck("555-555-5555") 應該返回 true.
telephoneCheck("(555)555-5555") 應該返回 true.
telephoneCheck("1(555)555-5555") 應該返回 true.
telephoneCheck("1 555)555-5555") 應該返回 false.
telephoneCheck("1 555 555 5555") 應該返回 true.
telephoneCheck("1 456 789 4444") 應該返回 true.
telephoneCheck("123**&!!asdf#") 應該返回 false.
telephoneCheck("55555555") 應該返回 false.
telephoneCheck("(6505552368)") 應該返回 false
telephoneCheck("2 (757) 622-7382") 應該返回 false.
telephoneCheck("0 (757) 622-7382") 應該返回 false.
telephoneCheck("-1 (757) 622-7382") 應該返回 false
telephoneCheck("2 757 622-7382") 應該返回 false.
telephoneCheck("10 (757) 622-7382") 應該返回 false.
telephoneCheck("27576227382") 應該返回 false.
telephoneCheck("(275)76227382") 應該返回 false.
telephoneCheck("2(757)6227382") 應該返回 false.
telephoneCheck("2(757)622-7382") 應該返回 false.
telephoneCheck("555)-555-5555") 應該返回 false.
telephoneCheck("(555-555-5555") 應該返回 false.
思路
- 初看題目嚇死寶寶了,這么多種情況;
- 應該是用正則表達式一種一種的配唄,要細心,慢慢來;
- 號碼分析,正確號碼應該是分3段:
3.1 第一段為國家代碼,固定為1位,切數字為1開頭,可能存在空格,或者不是1 的情況;
3.2 第二段為區號,固定3位,可能沒有括號,也可能有括號;
3.3 第三段為號碼,固定7位,變化很多,有直接7位,也有 3位+(空格、短線)+4位,還有存在其他非法字符、大于7位的情況; - 三段中間可能存在空格、短劃線,也可能沒有;
- 寫的時候找到一個在線測試正則表達式的:工具;
- 在查看 RegExp 的定義的時候,發現了.test() 的方法,可以用來測試某個字符串是否符合正則表達式,本題正好用上;
解答
function telephoneCheck(str) {
// 祝你好運
return /^1? ?(\d{3}|\(\d{3}\))[ |-]?\d{3}[ |-]?\d{4}$/.test(str);
}
telephoneCheck("555-555-5555");