电话号码的正则表达式,包括国家代码(最多18个字符)

时间:2018-10-14 07:23:44

标签: javascript regex

我想要以下示例中标记为正确数字的正则表达式:

    +256897845    
    +1 232321
    +29 2343 2432 43
    +555 2356897845
    +1245 2356878
    +918989784578
  • 开始时必须包含 + 符号
  • 可选支持最多3个空格,例如:+29 2343 2432 43
  • 最少8个字符,包括+符号
  • 最大字符数18位(3个空格+最多4位国家/地区代码+加号(+)符号+最多10位数字)

我尝试了以下自我测试,但没有工作:

^\+[0-9]?()[0-9](\s|\S)(\d[0-9]{18})$

2 个答案:

答案 0 :(得分:2)

您可以使用

/^\+(?=(?:\s?\d){7,17}$)\d+(?:\s?\d+){0,3}$/

请参见regex demo

详细信息

  • ^-字符串的开头
  • \+-加号
  • (?=(?:\s?\d){7,17}$)-直到字符串的末尾,必须出现7至17次出现的可选空白和数字
  • \d+-1个以上数字
  • (?:\s?\d+){0,3}-出现0至3次可选的空白和数字
  • $-字符串的结尾。

JS演示:

var strs = ['+256897845','+1 232321','+29 2343 2432 43','+555 2356897845','+1245 2356878','+918989784578'];
var rx = /^\+(?=(?:\s?\d){7,17}$)\d+(?:\s?\d+){0,3}$/;
for (var s of strs) {
  console.log(s, "=>", rx.test(s));
}

答案 1 :(得分:0)

尽管Wiktor的正则表达式可以很好地完成工作,但是我个人更喜欢保持正则表达式简单,因为如果经常发生正则表达式需求更改,它将更易于维护。

您可以编写这样的函数,它不仅可以处理在任何地方出现的多个空格,而且还可以处理连字符(和其他特殊字符),因为这在移动电话号码中也很常见,最后您可以简单地应用此正则表达式/ ^ [+] \ d {7,13} $ /

在这里演示

$data['post'] = $this->Posts_model->get_post($slug);

相关问题