【问题标题】:Regex for contact number that does/doesn't start with a +以 + 开头/不以 + 开头的联系号码的正则表达式
【发布时间】:2016-10-26 14:28:51
【问题描述】:

我尝试创建一个基本的南非联系号码正则表达式。它虽然不起作用。规则很简单。

10 位数字或 如果以 + 开头,则为 11 位

示例: 0119879874 0731231234 +27731231234 +27123456789

它必须只匹配数字和长度。 我的尝试:[+\d]\d{9}\d{0,2}
我在https://regex101.com/ 网站上进行了测试,看起来它有效,但当我用/[+\d]\d{9}\d{0,2}/.test('12345gjhf6789123456')) 测试它时,我得到了一个真实的价值。

【问题讨论】:

  • 我猜你的意思是 10 位数,如果它以 + 开头(因为 + 不是数字)
  • 它的南非国际号码以 +27 开头,因此通常为 073 123 4567 的号码将是 +2773 123 4567。它与陆线号码相同,因此如果它有 11 位数字+ 开始。 @ifran434 我在我链接的测试站点上尝试了你的正则表达式,但它似乎不起作用

标签: javascript regex validation numbers contact-form


【解决方案1】:

您应该指定^ - 字符串的开头和结尾$

/^(\+\d)?\d{10}$/.test('12345gjhf6789123456'))

【讨论】:

  • 我在我链接的网站上尝试了你的正则表达式,但它给了我一个错误
  • 抱歉没有更详细。当我尝试在正则表达式网站上测试它时,它说“”+前面的标记是不可量化的“”
  • 对不起,我忘记了一个``。固定
【解决方案2】:

与其使用不会提供任何错误消息且难以阅读(和维护)的正则表达式,我建议使用一个简单的验证函数来明确列出规则:

function validate(num) {
  if (num[0] === '+') {
    return num.length === 11;
  } else {
    return num.length === 10;
  }
}

这有几个优点,包括:

  • 比正则表达式更快
  • 以后更容易评论和展开
  • 可以替换为完整的谓词库或只是一组规则

【讨论】:

  • 谢谢我打算使用这种方法,但不幸的是它必须是我使用的正则表达式
猜你喜欢
  • 1970-01-01
  • 2021-07-31
  • 1970-01-01
  • 2011-11-27
  • 2015-10-30
  • 1970-01-01
  • 1970-01-01
  • 2017-01-26
相关资源
最近更新 更多