我有这个功能来检查我的电话号码:
function isValid( $what, $data ) {
switch( $what ) {
// validate a phone number
case 'phone_number':
$pattern = "/^[0-9-+]+$/";
break;
default:
return false;
break;
}
return preg_match($pattern, $data) ? true : false;
}
我想更改正则表达式以接受以下内容:)
(
字符(如(800)和space
。
例如,这个数字将通过验证,现在还没有通过:
+1(201)223-3213
让我们一步一步地构造正则表达式。还要考虑在匹配之前对空间进行修剪。
- 一开始可能有+号,也可能没有。这也需要转义。
'+?
- 然后是一个或多个数字,在带括号的部分
[0-9]+
之前。如果数字可以直接以括号中的一个组开头,您可能需要写[0-9]*
- 然后,可选地在括号中出现一组数字:
('[0-9]+')?
。假设只允许一个这样的组 - 然后是本地电话号码,也允许使用连字符:
[0-9-]*
-
最后一个字符必须是数字
[0-9]
,此处不允许使用连字符^'+?[0-9]+('([0-9]+'))?[0-9-]*[0-9]$
请在此处查看结果。修剪空间看起来像$trimmed = str_replace(' ', '', $pattern);
。
这个regexp:怎么样
/^[0-9-+()'s]+$/
点击此处查看操作
'/'(?'b[0-9]{3}')?[-. ]?[0-9]{3,5}[-. ]?[0-9]{4,8}'b/'
由于您似乎在使用它进行验证,因此可以使用str_replace('['s'+'-'(')]', '', $data)
来获取一个字符串,该字符串应该(如果电话号码有效)只包含数字。然后,您可以通过运行preg_match(''d{11}', $data)
来轻松地测试这个假设({11}
表示11位数字,如果有允许的范围,则使用min、max,如{min,max}
,例如'd{10,11}
)。
值得注意的是,这并不像Lorlin的答案那样彻底,因为你忽略了括号+
s或-
s的任何无效使用。你可能想使用两者的组合,或者任何最适合你需要的东西。