Php 用于表单验证的正则表达式

Php 用于表单验证的正则表达式,php,jquery,html,forms,validation,Php,Jquery,Html,Forms,Validation,您好,我有一个简单的表单要验证,我已经询问了客户端验证,但现在的问题是服务器端验证不起作用。想法是验证输入字段,并检查其长度是否在[5-20]之间chars并显示一个错误消息,如果没有并阻止表单提交,则应在客户端执行此操作,然后如果一切正常,则应将数据发送到服务器,服务器将检查输入数据是否仅包含字母如果是,则将回显“感谢提交表单”如果不显示错误消息“名称应仅包含从a到z的字母”,则问题是在提交表单后,我从客户端验证中获得了“确定”,我从未收到任何服务器消息。请帮助,这是代码 <?php

您好,我有一个简单的表单要验证,我已经询问了客户端验证,但现在的问题是服务器端验证不起作用。想法是验证输入字段,并检查其长度是否在[5-20]之间chars并显示一个错误消息,如果没有并阻止表单提交,则应在客户端执行此操作,然后如果一切正常,则应将数据发送到服务器,服务器将检查输入数据是否仅包含字母如果是,则将回显“感谢提交表单”如果不显示错误消息“名称应仅包含从a到z的字母”,则问题是在提交表单后,我从客户端验证中获得了“确定”,我从未收到任何服务器消息。请帮助,这是代码

 <?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>

表单验证
$(文档).ready(函数()
{

$(“表单”)。在('submit',myfunction);//上,这肯定是个问题:

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

if (myNameError) 
{
     ...
if(name.length<5 | | name.length>20)
myNameError+=“长度应介于5和20之间”;
其他的
myNameError+=“确定”
如果(myNameError)
{
...
您正在将
mynamererror
变量设置为字符串,即错误消息或字符串
ok
。因此
if(mynamererror)
始终为
true
,因此您永远不会向服务器发出任何POST请求


要解决此问题,如果没有错误,则不应在
myNameError
中添加任何字符串。

这肯定是个问题:

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

if (myNameError) 
{
     ...
if(name.length<5 | | name.length>20)
myNameError+=“长度应介于5和20之间”;
其他的
myNameError+=“确定”
如果(myNameError)
{
...
您正在将
mynamererror
变量设置为字符串,即错误消息或字符串
ok
。因此
if(mynamererror)
始终为
true
,因此您永远不会向服务器发出任何POST请求


要解决此问题,如果没有错误,则不应在
mynamererror
中添加任何字符串。

可能是一个愚蠢的问题,但为什么要使用action=“”?您的正则表达式还匹配空格
/^[a-zA-Z]*$/
处理表单时会发生什么?你应该在问题中造句,这有点难读。你知道表单将使用“POST”发送,为什么不检查
是否设置($\u POST['user'])
而不是
$\u服务器['REQUEST\u METHOD']=='POST'
。也许您的服务器不允许
$\u server
中的
REQUEST\u METHOD
指令。事实上,我正在阅读w3schools PHP课程,如果您有更好的学习场所,他们会这样做的。谢谢这可能是一个愚蠢的问题,但为什么您有action=“”?您的正则表达式还匹配空格
/^[a-zA-Z]*$/
处理表单时会发生什么?您应该在问题中造句,这有点难读。您知道表单将使用“POST”发送,为什么不检查
是否设置($\u POST['user'])
而不是
$\u SERVER['REQUEST\u METHOD']=='POST'
。可能您的服务器不允许
$\u server
中的
REQUEST\u METHOD
指令。实际上,我正在阅读w3schools PHP课程,如果您有更好的学习场所,他们会这样做的。谢谢