Telephone Number Validator

Return true if the passed string looks like a valid US phone number.

The user may fill out the form field any way they choose as long as it has the format of 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-5555555 555 555 555555555551 555 555 5555

For this challenge you will be presented with a string such as 800-692-7753 or 8oo-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.

telephoneCheck("555-555-5555") should return a boolean.

Passed

telephoneCheck("1 555-555-5555") should return true.

Passed

telephoneCheck("1 (555) 555-5555") should return true.

Passed

telephoneCheck("5555555555") should return true.

Passed

telephoneCheck("555-555-5555") should return true.

Passed

telephoneCheck("(555)555-5555") should return true.

Passed

telephoneCheck("1(555)555-5555") should return true.

Passed

telephoneCheck("555-5555") should return false.

Passed

telephoneCheck("5555555") should return false.

telephoneCheck("1 555)555-5555") should return false.

Passed

telephoneCheck("1 555 555 5555") should return true.

Passed

telephoneCheck("1 456 789 4444") should return true.

Passed

telephoneCheck("123**&!!asdf#") should return false.

Passed

telephoneCheck("55555555") should return false.

telephoneCheck("(6054756961)") should return false.

Passed

telephoneCheck("2 (757) 622-7382") should return false.

Passed

telephoneCheck("0 (757) 622-7382") should return false.

telephoneCheck("-1 (757) 622-7382") should return false.

Passed

telephoneCheck("2 757 622-7382") should return false.

Passed

telephoneCheck("10 (757) 622-7382") should return false.

Passed

telephoneCheck("27576227382") should return false.

Passed

telephoneCheck("(275)76227382") should return false.

Passed

telephoneCheck("2(757)6227382") should return false.

Passed

telephoneCheck("2(757)622-7382") should return false.

telephoneCheck("555)-555-5555") should return false.

telephoneCheck("(555-555-5555") should return false.

telephoneCheck("(555)5(55?)-5555") should return false.

答案

freeCodeCamp Challenge Guide: Telephone Number Validator

正则网站

一个说明正则各个部分的网站

https://regex101.com/#javascript

https://www.regexpal.com/

Character classes
. any character except newline
\w \d \s word, digit, whitespace
\W \D \S not word, digit, whitespace
[abc] any of a, b, or c
[^abc] not a, b, or c
[a-g] character between a & g
Anchors
^abc$ start / end of the string
\b word boundary
Escaped characters
. * \ escaped special characters
\t \n \r tab, linefeed, carriage return
\u00A9 unicode escaped ©
Groups & Lookaround
(abc) capture group
\1 backreference to group #1
(?:abc) non-capturing group
(?=abc) positive lookahead
(?!abc) negative lookahead
Quantifiers & Alternation
a* a+ a? 0 or more, 1 or more, 0 or 1
a{5} a{2,} exactly five, two or more
a{1,3} between one & three
a+? a{2,}? match as few as possible
ab cd match ab or cd

难点

如何只匹配一个括号???