请考虑以下事项:
+12 34 456 432
(12) 34 567 124
1234 56 78 90
(1234) 567 890
1234-567-890
1234 - 567 - 890
12 34 56 78
12-34-56-78
假设这些都是有效的电话号码结构
可以使用正则表达式来表达:找到至少8个数字,但不超过16个并忽略空格,圆括号,加号(一次)和减号。
我目前的工作样本一团糟:
^([\+|\(]{1,2})?+(\d{2,4})+([ |-|\)]{1,2})?+(\d{2,3})+([ |-]{1})?+(\d{2,3})+([ |-]{1})?+(\d{2,3})?$
即使建议使用电话号码验证。这些东西没有更简单的正则表达式语法吗?
答案 0 :(得分:1)
这可以减轻您的任务。
首先,删除不是数字的所有内容:
myString = myString.replace(/\D/g,'');
你会得到这个:
1234456432
1234567124
1234567890
1234567890
1234567890
1234567890
12345678
12345678
然后检查长度:
if(myString.length >= 0 && myString.length <=16)
// Do stuff
答案 1 :(得分:1)
要仅计算-
,)
,(
或空格(在开头允许+
)的位数和内容,您可以使用以下正则表达式:
^\+?(?:[ ()-]*\d){8,16}$
匹配
^
- 字符串开头\+?
- 一个或零+
(?:[ ()-]*\d){8,16}
- 8到16个序列......
[ ()-]*
- 0个或更多-
,)
,(
或空格字符\d
- 数字$
- 字符串结尾请参阅regex demo
答案 2 :(得分:0)
仅使用preg_replace获取数字,检查有效长度
<?php
$ph = "(12) 34 567 124";
$len = strlen(preg_replace('/[^0-9]+/', '', $ph));
if($len >=8 && $len <=16)
echo "Valid";
else
echo "Invalid";
答案 3 :(得分:0)
甚至不要考虑它。电话号码很复杂。他们非常复杂。谷歌有一个像样的库来处理名为libPhoneNumber的电话号码。
请原谅,但是忽略“+”会让你完全无所事事,完全错了。加号之后是某个国家/地区的国家/地区代码,然后是该国家/地区的本地电话号码(需要根据该国家/地区的规则进行解析,大约有200个)。如果没有“+”,则根据当地规则提供电话号码,您需要找出适用的本地规则。这意味着您的号码可以从拨打外汇的代码开始,而不是“+”,否则根据当地规则进行格式化。
因此,一个数字可能对“+”有效而没有它则无效,反之亦然,并且很可能是指在有或没有“+”的完全不同国家的不同实际手机。