我想要以下示例中标记为正确数字的正则表达式:
+256897845
+1 232321
+29 2343 2432 43
+555 2356897845
+1245 2356878
+918989784578
我尝试了以下自我测试,但没有工作:
^\+[0-9]?()[0-9](\s|\S)(\d[0-9]{18})$
答案 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);