使用正则表达式验证我们的号码

时间:2015-07-08 10:13:16

标签: javascript regex validation

我正在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。

5 个答案:

答案 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

DEMO

答案 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;
  }
}