regex 使用正则表达式验证美国电话号码时出现的问题

p5cysglq  于 12个月前  发布在  其他
关注(0)|答案(1)|浏览(126)

如果传递的字符串看起来像一个有效的美国电话号码,则返回true。
用户可以选择任何方式填写表单字段,只要它具有有效的美国号码的格式。以下是美国编号的有效格式示例(其他变体请参阅以下测试):

  • 555-555-5555
  • (555)555- 555
  • (555)555- 555
  • 555 555 5555
  • 5555555555
  • 1 555 555 5555

在这个挑战中,你会收到一个字符串,如800-692-7753或8 oo-six 427676; laskdjf.您的工作是根据上面提供的格式的任意组合来验证或拒绝美国电话号码。区号是必填项。如果提供了国家/地区代码,您必须确认国家/地区代码为1。如果字符串是有效的美国电话号码,则返回true;否则返回false。
这是我的代码:

function telephoneCheck(str) {
  let check = /^1*[\(|-| ]*(\d{3})[\)|-| ]*(\d{3})[- ]*(\d{4})$/
  return check.test(str);
}

console.log(telephoneCheck("1 555-555-5555"));

这些是我没通过的测试

  • telephoneCheck(“1 555-555-5555”)应返回true
  • telephoneCheck(“555-555-5555”)应该返回true。
  • telephoneCheck(“1 555)555-5555”)应该返回false。

我明白为什么我没有通过最后一个测试,我有问题的前瞻条件,当我设法使它工作,我搞砸了其他测试是正确的开始。但我真的不明白为什么前两项测试我都没通过。
这是所有其他的测试:

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

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

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

Passed:telephoneCheck("5555555555") should return true.

Failed: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.

Failed: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.

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

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

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

Passed: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.

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

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

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

Passed:telephoneCheck("55 55-55-555-5") should return false.

Passed:telephoneCheck("11 555-555-5555") should return false.

提前感谢!

tzdcorbm

tzdcorbm1#

正则表达式:

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

Demo:

https://regex101.com/r/cO5LK0/1

相关问题