我正在尝试获取格式为 12 位数字的电话号码的正则表达式:+############。
我尝试使用的代码是
([+]?)\d{12}(\d{2})?$
,但没有运气。
此模式将精确匹配加号后的 12 位数字:
/^\+\d{12}$/
您的尾随可选
(/d{2})?
组件在您的模式中做什么?
这与没有正则表达式的功能相同:
$phone='+012345678912';
if($phone[0]=='+' && strlen($phone)==13 && is_numeric(substr($phone,1))){
echo 'valid';
}else{
echo 'invalid';
}
// displays: valid
我们是否需要捕获某些数字/序列,或者您只是验证其具有该格式的数字?
每当我不确定正则表达式时,我都会使用这个在线工具regex101。它在右侧准确显示您正在捕获/检查的内容,这非常有用。根据您的用例,我不明白这个正则表达式如何不起作用,请提供一个示例。否则:
您仅捕获 + 号和最初的 12 之后的 2 位数字。
我建议您使用
\+(\d{12})
并避免使用不需要的锚点和捕获组。
^(\+)(\d{3}\s?){4}(\d{2})?$
其中
\s
是 space 字符,?
表示 可选
https://regex101.com/r/nX5XnH/3(演示)
+012 345 678 912 (ok)
+012345 678 912 (ok)
+012 345678912 (ok)
+01234567891244 (ok)
012345678913 (no mach - missing plus sign)