【问题标题】:Regex for form validation用于表单验证的正则表达式
【发布时间】:2016-05-31 15:08:09
【问题描述】:

你好我有一个简单的表单来验证我已经询问过客户端验证但现在的问题是服务器端验证不起作用这个想法是验证输入字段并检查其长度是否在 [5-20 ] chars 并显示错误消息,如果不是,以及阻止表单提交,这应该发生在客户端,然后如果一切正确,数据应该发送到服务器,服务器将检查输入数据是否只包含字母如果是,那么它将回显“感谢提交表单”,如果不显示错误消息“名称应仅包含从 a 到 z 的字母”,问题出在提交表单之后,我从客户端验证中获得了 ok我从来没有收到任何服务器消息请帮助这里是代码

 <?php
if($_SERVER['REQUEST_METHOD'] == 'POST')
{
    $name = $_POST['user'];

    if(!preg_match("/^[a-zA-Z ]*$/",$name))
         echo "name must contain only characters";   
       else
         echo "thanks for submitting the form";


}
?>
<!doctype html>
<html>
<head>
    <title>form validation</title>
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.2/jquery.min.js"></script>

    <script>
       $( document ).ready(function() 
        {

                $("form").on('submit', myfunction); //<-- listen for form submit, not button click

                function myfunction(evt)
                { //<-- the event object is automatically passed along;
                  //    this is key for suppressing submission
                    name = $("#user").val();
                    nameError = $(".error").first();
                    myNameError = "";

                    if(name.length < 5 || name.length > 20)
                        myNameError += "length should be between 5 and 20 ";
                    else
                        myNameError += "ok"

                    if (myNameError) 
                    {
                        evt.preventDefault(); //<-- suppress submission if error found
                        nameError.html(myNameError);
                    }



                 }


        });
    </script>

    <style>
        .error
        {
            color : red;
            text-transform: capitalize;
            margin-left: 20px;
        }
    </style>
</head>
<body>

    <form method="post" action="<?php echo htmlspecialchars($_SERVER['PHP_SELF'])?>">
        NAME : <input type="text" name="user" id="user"><span class="error"></span><br />
        <input type="submit" value="Submit" id="submit">
    </form>

</body>
</html>

【问题讨论】:

  • 可能是一个愚蠢的问题,但为什么你有 action="" ?
  • 你的正则表达式也匹配空格/^[a-zA-Z ]*$/
  • 处理表单时会发生什么?你应该在你的问题中形成句子,这有点难以阅读。
  • 你知道表单将使用'POST'发送,为什么不检查isset($_POST['user'])而不是$_SERVER['REQUEST_METHOD'] == 'POST'。也许您的服务器不允许在$_SERVER 中使用REQUEST_METHOD 指令。
  • 实际上正在阅读 w3schools PHP 课程,如果您有更好的学习场所,他们就是这样做的,将不胜感激,谢谢

标签: php jquery html forms validation


【解决方案1】:

这绝对是个问题:

if (name.length < 5 || name.length > 20)
    myNameError += "length should be between 5 and 20 ";
else
    myNameError += "ok"

if (myNameError) 
{
     ...

您将myNameError 变量设置为字符串,错误消息或字符串ok。所以if (myNameError) 总是true 所以你永远不会向服务器发出任何 POST 请求。

为了解决这个问题,在没有错误的情况下,你不应该在myNameError中添加任何字符串。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-11-30
    • 2011-12-08
    • 2012-03-15
    • 1970-01-01
    • 2011-06-17
    相关资源
    最近更新 更多