若是传入字符串是一个有效的美国电话号码,则返回 true
.正则表达式
用户能够在表单中填入一个任意有效美国电话号码. 下面是一些有效号码的例子(还有下面测试时用到的一些变体写法):测试
555-555-5555 (555)555-5555 (555) 555-5555 555 555 5555 5555555555 1 555 555 5555
在本节中你会看见如 800-692-7753
or 8oo-six427676;laskdjf
这样的字符串. 你的任务就是验证前面给出的字符串是不是有效的美国电话号码. 区号是必须有的. 若是字符串中给出了国家代码, 你必须验证其是 1
. 若是号码有效就返回 true
; 不然返回 false
.code
RegExpip
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
.分析该题,主要是分析电话号码的有效排列方式,有效的号码规则以下:字符串
- 分离
国家码-区号-电话号
,格式如1-555-555-5555
,其中每一个分段中间是不能被分割的,如1-55-5-555-5555
是非法的;- 在不能分段的每一个区域中和两头,空格是能够随意加的(任意个),如:
1 555 555 5555
、155555555555
是合法的;- 在不能分段的每一个区域中,中划线是能够加一个的,如:
1-555-555-5555
、1 - 555-555 - 5555
、1 - 555-5555555
是合法的,1-555--555-5555
是非法的;- 在区号上能够加小括号,并且必须配对,括号中间容许出现空格在数字两边,如:
1(555)555 5555
、1( 555 )5555555
是合法的,1 555) 555 5555
是非法的;- 除了以上分隔符和数字,其余任意符号都是非法的,如:
1a(555)555 5555
、1(555) 555 5555$
都是非法的;- 数字必须限制在 10 个(无国家码)/11个,如:
1 555 5555 5555
是非法的;- 国家码能够不存在,存在则必须为1,如:
(555) 555 5555
、1 555 555 5555
是合法的,而2 555 555 5555
是非法的;
正则表达式编写get
- 数字分段匹配,
[\d]{3}
这样就是匹配连续三个数字,经过该方式,能够匹配数字分段和数字数目;?
匹配符,匹配一个或0个前面的符号,如:[-]?
,匹配一个或0个中划线;*
匹配符,匹配0个或多个前面的符号,如:[\s]*
,匹配0个或多个空格;^
、$
两个符号分别表示字符串首匹配和字符串尾匹配,两个均加入表示从串首匹配到串尾,如:^[\d]{3}[-][\d]{3}-[\d]{4}$
这个正则式,555-555-5555
是匹配的,但a55-555-5555
、555-555-55555
等都是不匹配的;
综上,因此获得的正则匹配表达式如代码说明
代码io
function telephoneCheck(str) { // Good luck! var regStr = /^[\s]*[\d]?[\s]*[-]?[\s]*[(]?[\s]*[\d]{3}[\s]*[)]?[\s]*[-]?[\s]*[\d]{3}[\s]*[-]?[\s]*[\d]{4}[\s]*$/; if (regStr.test(str)) { // 匹配数目和号码串格式 if ((/[(]/.test(str) && /[)]/.test(str)) || // 若是有(),检查括号的配对 (!(/[(]/.test(str)) && !(/[)]/.test(str)))) { // 无(),就不能存在任意括号符号 if (str.replace(/[\s-()]*/g, "").length > 10) { // 长度判断,判断国家是否存在,若存在是否正确 return (str[0] === "1"); } return true; } } return false; } telephoneCheck("555-555-5555");