我在我的网站上创建了一个联系表格,并希望确认该电话号码仅由数字组成,包括一个前导零(如果输入的话)。
我的sendmail.php
文件中有以下代码:
if ( empty($_REQUEST['phone']) ) {
$pass = 1;
$alert .= $emptyphone;
} elseif (preg_match('/^[0-9]+$/', $_REQUEST['phone'] ) ) {
$pass = 1;
$alert .= $alertphone;
此代码应检查字段phone
以查看它是否完全由数字组成。
如果没有,则会调用消息$alertphone
告诉用户存在问题。
答案 0 :(得分:4)
验证电话号码并不像到目前为止所说的那么简单。您不仅需要检查电话号码是否仅包含您必须确保其长度正确的号码。您还需要确保不会让最终用户难以...... 使用 ......否则您将最终失去客户。
如果我输入的电话号码为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个其他号码)
- 关闭捕获组$
- 匹配字符串结尾人们经常添加空格或括号/标点符号,以便让人们更容易阅读/记住电话号码。电话号码输入的一些示例可能是:
这些都是有效的电话号码,但您的系统不会接受......
要解决此问题(并让用户的生活更轻松),您可以从电话号码中删除不是数字的字符,然后检查它的长度。
$phoneNumber = "(09999) 999 999";
$phoneNumber = preg_replace('/[^\d]/', '', $phoneNumber); //Replace non-numbers with nothing
echo $phoneNumber; //Outputs: 09999999999
我强烈建议您不要使用$_REQUEST
,而是使用$_POST
或$_GET
作为额外的安全步骤。明确使用您期望数据通过的方法是确保请求合法的另一个验证步骤。
答案 1 :(得分:1)
elseif (!preg_match('/^[0-9]+$/', $_REQUEST['phone'] ) ) {
应该做的工作。由于您使用的RegEx代表正确的电话号码,如果找到没有匹配,则需要发出警告,而不是 找到匹配项。