验证电话号码并不像目前建议的那么简单。您不仅需要检查电话号码是否仅包含数字,还必须确保其长度正确。您还需要确保您不会让最终用户难以......使用......否则您最终会失去客户。
例子:
如果我输入我的电话号码,因为09999 999 999
它将无法通过您的系统验证。因为它包含空格,所以很多人确实以这种方式和其他更复杂的方式输入电话号码。
代码
if(empty($_REQUEST['phone'])){
//Empty phone number
}
else if(preg_match('/^(0\d{10}|[1-9]\d{9})$/', $_REQUEST['phone'], $matches)){
//Good phone number
}
else{
//Bad phone number
}
正则表达式解释
^
- 字符串的开始
(
- 开始一个捕获组
0\d{10}
- 匹配一个 0 后跟另外 10 个数字
|
- ...或者...
[1-9]\d{9}
- 匹配一个非 0 数字后跟 9 个其他数字
)
- 关闭捕获组
$
- 匹配字符串结尾
附加检查
人们经常添加空格或括号/标点符号以使电话号码更易于人类阅读/记住。电话号码输入的一些示例可能是:
- (00000) 999 999
- (0)9999 999 999
- 09999 999 999
- 09999999999
- 9999999999
这些都是有效的电话号码,但不会被您的系统接受...
要解决此问题(并使用户的生活更轻松),您将从电话号码中删除不是数字的字符,然后检查其长度。
$phoneNumber = "(09999) 999 999";
$phoneNumber = preg_replace('/[^\d]/', '', $phoneNumber); //Replace non-numbers with nothing
echo $phoneNumber; //Outputs: 09999999999
关于安全的说明
我强烈建议您不要使用$_REQUEST
,而是使用$_POST
or$_GET
作为额外的安全步骤。明确使用您期望数据通过的方法是确保请求合法的又一验证步骤。