我在我的网站上创建了一个联系表格,并希望验证电话号码是否完全由数字组成,如果输入了数字,则包括前导零。
我的sendmail.php
文件中有以下代码:
if ( empty($_REQUEST['phone']) ) {
$pass = 1;
$alert .= $emptyphone;
} elseif (preg_match('/^[0-9]+$/', $_REQUEST['phone'] ) ) {
$pass = 1;
$alert .= $alertphone;
此代码应检查字段phone
以查看它是否完全由数字组成。
如果没有,它会调用消息$alertphone
告诉用户有问题。
验证电话号码并不像到目前为止建议的那么简单。您不仅要检查电话号码是否仅包含号码,还必须确保它的长度正确。您还需要确保不会使最终用户难以...使用...否则,您最终将失去客户。
例:
如果我输入我的电话号码作为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
或$_GET
作为额外的安全步骤。显式使用您希望数据通过的方法是确保请求合法的另一个验证步骤。
elseif (!preg_match('/^[0-9]+$/', $_REQUEST['phone'] ) ) {
应该可以完成这项工作。由于您使用的正则表达式代表正确的电话号码,因此如果没有找到匹配项,则需要发出警告,而不是在找到匹配项的情况下发出警告。