我有这个当前代码,允许我从注册表单检查用户的名字,以确保它只包含字母,空格和破线号。然而,我如何启用检查多个字段(例如姓氏)。
/* Checks if the first name only includes letters, dashes or spaces */
if(preg_match("/^[a-zA-Z -]+$/", $_POST['firstname']) == 0)
$errors .="Your name must only include letters, dashes, or spaces.";
我尝试了以下操作,但它似乎只检查其中一个,而不是两个。
if(preg_match("/^[a-zA-Z -]+$/", $_POST['firstname'], $_POST['lastname']) == 0)
也:
if(preg_match("/^[a-zA-Z -]+$/", $_POST['firstname'] and $_POST['lastname']) == 0)
提前感谢您的建议
由于两个字段都将使用相同的正则表达式进行验证,并且您不想返回任何关于哪一个(如果有的话)失败的特定反馈,因此可以简单地将两个字符串连接起来。
if(preg_match("/^[a-zA-Z -]+$/", $_POST['firstname'] . $_POST['lastname']) == 0)
您可以使用preg_grep
,它是preg_match。
$results = preg_grep('/[^a-zA-Z -]/', $_POST);
if (count($results) > 0) {
die("Some field has invalid characters");
}
但是,正如AurimasL在上面指出的那样,您可能希望单独验证每个字段,这样您可以提供更好的反馈,而不仅仅是一个"你搞砸了,修复它!"的错误。
当然,没有人说你不能使用这个preg_grep作为任何错误的快速/脏检查,然后在有错误的情况下进行单独的字段检查。
您可以使用preg_match来做这种事情,但这是一个非常脏的东西,因为您永远不会知道哪个字段不遵守您的规则。您可以像下面的示例那样连接字符串:
if(preg_match("/^[a-zA-Z -]+$/", $_POST['firstname'] . $_POST['lastname']) == 0)
无论如何,我建议你单独检查每个字段,不要做这种事情。
验证每个字段
if (preg_match("/^[a-zA-Z's-]+$/i", $_POST['firstname']) == 0) {
$errors .="Your name must only include letters, dashes, or spaces.";
}
if(preg_match("/^[a-zA-Z's-]+$/i", $_POST['lastname']) == 0) {
$errors .="Your lastname must only include letters, dashes, or spaces.";
}
或两者都
(如果用户名和姓用空格分隔) if(preg_match("/^([a-zA-Z's-]+)'s+([a-zA-Z's-]+)$/i",$_POST['lastname'] . $_POST['lastname']) == 0) {
}
解决这个问题的方法叫做:复制粘贴。
您需要两个if
检查,或者至少两个条件。不能通过两个参数检查preg_match
。
这是我建议你的符号风格(即使我为此受到一些批评):
if ( preg_match("/^[a-zA-Z -]+$/", $_POST['firstname'])
and preg_match("/^[a-zA-Z -]+$/", $_POST['lastname']) )
{
...
}
需要注意的是,每个preg_match(…)调用的括号必须关闭。if()的外部父函数应该突出。如果你是一门新语言,你应该注意格式化。
如果您想检查not匹配条件,那么在每个preg_match()
调用之前使用!
not rather。