使用preg_match对文本区域进行PHP验证,用于数字,字母和空格

时间:2017-07-07 06:37:29

标签: php regex html5

所以我几乎完全正常工作了。我坚持的一件事是从 preg_match开始。我在这里阅读了手册http://php.net/manual/en/function.preg-match.php,但它并没有完全描述我创建自己的验证的语法。 示例:对于文本区域,如果我只想允许空格,字母,数字和某些特殊字符(不太可能)。这是代码

<?php
    if(isset($_POST['name'])
            && isset($_POST['phone'])
            && isset($_POST['email'])) {

            if (empty($_POST["name"])) {
                    $nameErr = "Name is required";
            }
            else {
                    $name = $_POST["name"];
              // check if name only contains letters and whitespace for name
                    if (!preg_match("/^[a-zA-Z ]*$/",$name)) {
                            $nameErr = "Only letters and white space 
                                allowed";
                    }
            }

            if (empty($_POST["phone"])) {
                    $phoneErr = "Phone number is required";
            }
            else {
                    $phone = $_POST["phone"];
                     // check if phone only contains numbers for phone
                    if (!preg_match('/^\(?[\d]{3}\)?\s?\-?[\d]{3}\s?\-?[\d]
                        {4}$/', $phone)) {
                            $phoneErr = "Only numbers allowed";
                    }
            }


            if (empty($_POST["email"])) {
                    $emailErr = "Email is required";
            }
            else {
                    $email = $_POST["email"];
                    // check if e-mail address is well-formed
                    if (!filter_var($email, FILTER_VALIDATE_EMAIL)) {
                            $emailErr = "Invalid email format";
                    }
            }


            if($nameErr or $emailErr or $phoneErr){
                    echo $nameErr;
                    echo $phoneErr;
                    echo $emailErr;
                    die();
            }
            else if($data = $_POST['name'] . "\n" .
                    $_POST['email'] . "\n" .
                    $_POST['phone'] . "\n" .
                    $_POST['county'] . "\n" .
                    $_POST['floor'] . "\n" .
                    $_POST['descr'] . "\n"){

                    echo "Thank you for your inquery!" . "<br/>" .
                            "An estimator will be with you shortly.";

                    mail('theshadowcallsu@gmail.com', 'Estimation Request', 
                          $data);
            }
    }

 ?>

1 个答案:

答案 0 :(得分:1)

preg_match会将正则表达式模式应用于字符串,以查看模式是否与字符串匹配

对于输入验证,您将尝试仅按任何顺序匹配所需的字符,如果匹配失败(即,不允许使用某个字符),则输入包含未在字符串模式中声明的字符以匹配

例如:

if (!preg_match("/^[a-zA-Z ]*$/",$name)) {
   $nameErr = "Only letters and white space allowed";
}

它匹配仅包含a-zA-Z的字母以及空格的字符串。如果字符串包含其他内容,则不会匹配它。

对于文本区域,这样的事情可以解决问题:

if (!preg_match("/^[a-zA-Z0-9 \(\)\n]*$/",$name)) {
   $nameErr = "not allowed";
}

它的作用:

  • ^:字符串的开头
  • $:字符串结尾
  • [a-zA-Z0-9 \(\)\n]:匹配字母a-zA-Z,数字0-9(),新行。
    • \n:直线返回
    • \(\):Literraly字符(),因为括号用于捕获匹配字符串中的组

您可以在[]想要允许的字符之间添加。

请参阅https://regex101.com/r/wmjrkw/1