Php 如何使用preg_match检查仅包含多个字段上字母的表单帖子?

Php 如何使用preg_match检查仅包含多个字段上字母的表单帖子?,php,validation,preg-match,Php,Validation,Preg Match,我有一个最新的代码,允许我从注册表中检查用户的名字,以确保它只包含字母、空格和破折号。但是,如何启用检查多个字段(例如姓氏) 我尝试了以下方法,但它似乎只检查其中一个,而不是两个 if(preg_match("/^[a-zA-Z -]+$/", $_POST['firstname'], $_POST['lastname']) == 0) 而且: if(preg_match("/^[a-zA-Z -]+$/", $_POST['firstname'] and $_POST['lastname

我有一个最新的代码,允许我从注册表中检查用户的名字,以确保它只包含字母、空格和破折号。但是,如何启用检查多个字段(例如姓氏)

我尝试了以下方法,但它似乎只检查其中一个,而不是两个

  if(preg_match("/^[a-zA-Z -]+$/", $_POST['firstname'], $_POST['lastname']) == 0)
而且:

if(preg_match("/^[a-zA-Z -]+$/", $_POST['firstname'] and $_POST['lastname']) == 0)

提前感谢您的建议。

您可以使用preg_match进行此类操作,但这是一件非常肮脏的事情,因为您永远不知道哪些字段不遵守您的规则。可以连接字符串,如示例所示:

if(preg_match("/^[a-zA-Z -]+$/", $_POST['firstname'] . $_POST['lastname']) == 0)

无论如何,我建议您单独检查每个字段,不要做这种事情。

因为这两个字段都将使用相同的正则表达式进行验证,并且您不想返回关于哪一个字段(如果有)失败的任何具体反馈,您可以简单地连接两个字符串

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.";
 }
或者两者都有(如果用户名和姓氏之间用空格分隔)


问题的解决方案称为:复制和粘贴

如果检查,则需要两个
,或者至少两个条件。不能传递两个要检查的参数

这就是我建议你的记谱方式(即使我为此受到一些指责):

需要注意的是,括号必须在每次preg_match(…)调用前后闭合。if()的外部参数应该非常突出。如果你对这门语言不熟悉,你应该努力使用格式

如果要检查不匹配的条件,请在每个
preg\u match()
调用之前添加一个
而不是。

您可以使用,这是数组的预匹配

$results = preg_grep('/[^a-zA-Z -]/', $_POST);
if (count($results) > 0) {
   die("Some field has invalid characters");
}
但是,正如AurimasL在上面指出的那样,您可能希望单独验证每个字段,这样您就可以提供更好的反馈,而不仅仅是一个笼统的“你搞砸了,修复它!”错误


当然,没有什么规定你不能使用这个preg\u grep作为任何错误的快速/脏检查,然后在出现错误的情况下进行单独的字段检查。

谢谢-这就是我想要的,但是在接受了这里的建议后,我会检查每个字段,因为这似乎是更好的方法。用特殊字符匹配名称(安德烈、艾尔基德等)使用:
~^(?:[\p{L}\p{Mn}\p{Pd}\'\x{2019}]+(\s)*[\p{L}\p{Mn}\p{Pd}\\x{2019}]+\s?+$~u
稍微修改自:
 if(preg_match("/^([a-zA-Z\s-]+)\s+([a-zA-Z\s-]+)$/i",$_POST['lastname'] . $_POST['lastname']) == 0) {

}
if ( preg_match("/^[a-zA-Z -]+$/", $_POST['firstname'])
and  preg_match("/^[a-zA-Z -]+$/", $_POST['lastname'])  )
{
    ...
}
$results = preg_grep('/[^a-zA-Z -]/', $_POST);
if (count($results) > 0) {
   die("Some field has invalid characters");
}