does/doesn 不以 + 开头的联系电话的正则表达式

Regex for contact number that does/doesn't start with a +

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

10 位数字或 如果以 +

开头,则为 11 位数字

例子: 0119879874 0731231234 +27731231234 +27123456789

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

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

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

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

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

这有几个优点,包括:

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