我正在freecodecamp上练习验证我们的电话号码。
用户可以选择填写表单字段,只要它是有效的美国号码即可。以下是美国数字的所有有效格式:
555-555-5555,(555)555-5555,(555)555-5555,5555 555 5555,5555555555,1555 555 5555
我使用RegEx来测试输入。我在regex101上输入这些表达式
(([1]\s)?(\()*(\d{3})(-|\)|\)\s|\s)*(\d{3})(-|\s)*\d{4})
测试输入,如:
2 **(757)622-7382 **返回true
- 1(757)622-7382 返回true
10 **(757)622-7382 **返回true
我怎样才能测试前2,减号和10。
答案 0 :(得分:1)
我建议您查看OWASP Validation Regex Repository,因为它们是验证和持续更新的主题
对于美国电话(在我写作时),建议的RegEx为^\D?(\d{3})\D?\D?(\d{3})\D?(\d{4})$
答案 1 :(得分:0)
((-)?\d{0,2} )?
请注意space
{0,2}
(-)? // may begin with a minus
(\d{1,2})? // may have 1 or 2 digits before the actual number
( )? // may have a space after that
答案 2 :(得分:0)
以下是正则表达式的修改版本,现在将与新的手机格式匹配:
^[-+]?(?:\d{1,2}\s)?\(*(?:\d{3})(?:-|\)|\)\s|\s)*\d{3}(?:-|\s)*\d{4}$
请参阅demo
注意我删除了捕获组(我怀疑你需要它们,并且它们会产生额外的开销)并在数字之前添加了可选的+
或-
。
此外,由于limiting quantifier \d{1,2}
,{1,2}
匹配 1或2位。
答案 3 :(得分:0)
可能会有点迟,但这是解决这个问题的方法。
/^(1\s?)?(\(\d{3}\)|\d{3})[\s\-]?\d{3}[\s\-]?\d{4}$/;
你确实希望在表达式的开头有^来匹配字符串的第一个字符,并且你想在结尾使用$让表达式知道这是结束。
您可以在以下github github link
上看到上述答案和另一种方式答案 4 :(得分:0)
这也行
function telephoneCheck(str){
const regEx = /^((1\s*)(([(]\d{3}[)])|(\d{3}))|([(]\d{3}[)])|(\d{3}))(\s*|\-)\d{3}(\-|\s*)\d{4}$/g
if (regEx.test(str)) {
return true;
}
else {
return false;
}
}