Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/385.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 通过php和jQuery验证电子邮件_Javascript_Php_Jquery - Fatal编程技术网

Javascript 通过php和jQuery验证电子邮件

Javascript 通过php和jQuery验证电子邮件,javascript,php,jquery,Javascript,Php,Jquery,我想通过使用php和jquery验证接收输入的电子邮件字段。 但我无法找出我程序中的错误 下面是index.html <!DOCTYPE html> <html lang="en"> <head> <title> </title> <meta charset="utf-8" /> <link rel="stylesheet" type="t

我想通过使用php和jquery验证接收输入的电子邮件字段。 但我无法找出我程序中的错误

下面是
index.html

<!DOCTYPE html>
<html lang="en">
    <head>
         <title>
         </title>
         <meta charset="utf-8" />
         <link rel="stylesheet" type="text/css" href="css/custom.css" />
    </head>
    <body>
        <p>Email: <input type="text" id="myInput" /></p>
        <p id="feedbackDiv"></p>
        <p><input type="button" id="myButton" value="Check" /></p>

    <script type="text/javascript" src="js/jquery-3.1.1.min.js" ></script>
    <script type="text/javascript" src="js/custom.js" ></script>
    </body>
</html>
下面是
email.php

<?php
    $y = $_POST['email_value_server'];
    if(isset($y)){
         if(!empty($y)){
             if(filter_var($y,FILTER_VALIDATE_EMAIL) === false){
                 echo "This doesn't appear to be valid email address.";
             }else{
                 echo "Valid email address.";
             }
         }
    }
?>
您的
$(“#myInput”)
绑定嵌入到按钮的
单击处理程序中。首先,您需要将代码移到处理程序之外。试试这个:

$(document).ready(function(){
    function validateEmail(mail){
        $.post('php/email.php',{email_value_server: mail},function(returnData){
            $('#feedbackDiv').html(returnData);
        });
    }

    $('#myInput').focusin(function(){
        var x = $(this).val();
        if(x === ''){
            $('#feedbackDiv').html('Please fill the email address.');
        }else{
            validateEmail(x);
        }
    }).blur(function(){
        $('#feedbackDiv').html('');
    }).keyup(function(){
        validateEmail($(this).val());
    });
});
更新

如果您只希望在提交时发送电子邮件检查(这可能是一个好主意),那么就简单一点

$(document).ready(function(){
    function validateEmail(mail){
        $.post('php/email.php',{email_value_server: mail},function(returnData){
            $('#feedbackDiv').html(returnData);
        });
    }

    $('#myButton').click(function(){
        var x = $('#myInput').val();
        if(x){
            validateEmail(x);
        } else {
            $('#feedbackDiv').html('Please fill the email address.');
        }
    });
});
你的PHP也需要一些工作。如果未设置,
$y=$\u POST['email\u value\u server']
将失败。您需要这样检查:

<?php
    $y = isset($_POST['email_value_server']) ? $_POST['email_value_server'] : NULL;
    // this will also check for empty or NULL
    if(filter_var($y, FILTER_VALIDATE_EMAIL) === false){
         echo "This doesn't appear to be valid email address.";
    } else {
        echo "Valid email address.";
    }
?>
<form action="email.php" method="POST">
<p>Email: <input type="email" id="myInput"/> 
<span id="feedbackDiv"></span>
</p>
<p><input type="submit" id="myButton" value="Check" /></p>
</form>

更改
index.html
自定义.js
,如下代码片段所示

$(文档).ready(函数(){
功能postEmail(emailObj){
//如果元素(具有必需属性)没有值,则设置为true。
if(emailObj.validity.valueMissing==true){
警报(“空电子邮件地址!”);
} 
//如果元素的值与其模式属性不匹配,则设置为true。
if(emailObj.validity.patternmatch==true){
警报(“电子邮件地址中的模式错误!”);
}
//如果元素的值超过其maxLength属性,则设置为true。
if(emailObj.validity.tooLong==true){
警报(“电子邮件地址太长!”);
}
//如果元素的值有效,则设置为true。
if(emailObj.validity.valid==true){
console.log(emailObj.value);
$.post('php/email.php',{email\u value\u server:emailObj.value},函数(returnData){
$('#feedbackDiv').html(返回数据);
});
} 
}   
$('#myInput')。在(“键控”,函数(e)上{
//检测由其代码按下的键
var-keyCode=e.keyCode?e.keyCode:e.which;
//如果按enter键,则发送电子邮件
如果(键代码===13){
var$\u this=$(this).get(0);
邮寄电子邮件(美元);
}   
});
//点击按钮发布电子邮件
$('#myButton')。在(“单击”,函数()上){
var$\u this=$('#myInput').get(0);
邮寄电子邮件(美元);
});
});

电子邮件:


在浏览了您的代码之后,有很多东西。有时在编程中,在开始编程之前定义并写下您想要实现的目标是很重要的。从编程开始,有时会导致像这里这样的问题

一般反馈

  • 在不详细讨论bug的情况下,我的第一个观察结果是,您正在尝试检查和验证电子邮件,在键入和提交电子邮件时,它充满了您的想法,并且希望同时尝试许多概念,这会产生冲突。例如,您试图在jQuery中
    单击
    ,但同时尝试使用
    keyup
    方法,这将永远不会起作用,因为
    keyup
    如果未启用,则无法工作
    单击
    ,反之亦然
  • 我的第二个观察结果是,这是我真正鼓励任何初学者学习的东西,给属性赋予适当的名称约定。像
    id=“myInput”
    只需调用
    id=myEmailInput
    id=emailInput
    myButton
    只需调用它
    submitButton
    submitBtn
    等。重要的是调用任何人都能理解的东西,想象一下你有几个按钮和输入字段,很难记住哪个按钮和什么是myInput,这也是留给您和您的口味的事情
  • 即使这样,如果您的代码正常工作,通过键入(
    keyup
    )方法通过Ajax检查无效电子邮件也不是一个好的做法,这将花费您在服务器端进行大量查找。我会让我的代码在客户端的第一步检查电子邮件格式,当它看起来相同时,再进行服务器/php查找,以便最终进行数据库查找或任何操作
  • 其他的事情也很少。检查电子邮件可以通过html5()轻松完成,您可以单独使用JavaScript、jQuery或PHP或任何其他技术或两者兼用来改进它或提供额外功能,所有这些都取决于您的目标和需求

    回到您的代码,作为回答,我会允许自己修改您的代码,使其工作,并添加一些解释。也就是说,这可以通过多种方式来实现,我的回答只是一个例子,你可以改变它,让它最适合你

    我也尽可能地保持它的风格,使用PHP、jQuery和Ajax,希望它能帮助您实现目标并提高技能

    HTML:

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <title>
        </title>
        <meta charset="utf-8"/>
        <link rel="stylesheet" type="text/css" href="css/custom.css"/>
    </head>
    <body>
    <p>Email: <input type="text" id="myInput"/>
    <span id="feedbackDiv"></span>
    </p>
    <p><input type="button" id="myButton" value="Check"/></p>
    <script type="text/javascript" src="js/jquery-3.1.1.min.js" ></script>
    <script type="text/javascript" src="js/custom.js"></script>
    </body>
    </html>
    
    <?php
    
    if (isset($_POST['email']))
    {
        $email = $_POST['email'];
    
        if (filter_var($email, FILTER_VALIDATE_EMAIL))
        {
            http_response_code(200);
            echo $email . ' is valid email';
            // Do eventually email look up in database
            // something like
            // if email exist in db than msg "Email Exist" else msg "Email Does not Exist"
        } else {
            http_response_code(412);
            // Do something else or just leave it as is
        }
    }
    
    $(document).ready(function () {
    
        // if you need to disable and enable button depending on email validity.
        //disableBtn(true);
    
        // each time you press and release the key it will check
        $('#myInput').on('keyup', function (e) {
            var $input = $(this);
            console.log($input);
            action($input);
        });
    
        // you can always click Check for force check
        $('#myButton').on('click', function (e) {
            var $input = $('#myInput');
            action($input);
        });
    
        function action(passData) {
    
            var $input = passData
                , value = $input.val()
                , data = {
                email: value
            };
    
            // if empty alert message would disappear
            if (value != "") {
                // Pre validate email on client side to reduce the server lookup
                if (validateEmailOnClientSide(value)) {
                    $.ajax({
                        method: 'POST',
                        url: 'email.php',
                        data: data,
                        // if server return valid email then we get Green text
                        success: function (returnData) {
                            $('#feedbackDiv').css('color', 'green').html(returnData);
                            //disableBtn(true);
                        },
                        // if server return invalid email then we get Red text
                        error: function (xhr, status, error) {
                            $('#feedbackDiv').css('color', 'red').html(value + " is not valid email");
                            //disableBtn(false);
                        },
                        dataType: 'text'
                    });
                } else {
                    // Red text from browser side
                    $('#feedbackDiv').css('color', 'red').html(value + " is not valid email");
                    //disableBtn(false);
                }
            } else {
                // Emptying text
                $('#feedbackDiv').html("");
                //disableBtn(false);
            }
    
        }
    
        function validateEmailOnClientSide(email) {
            var re = /\S+@\S+\.\S+/;
            return re.test(email);
        }
    
        function disableBtn(boolean) {
            $("#myButton").attr("disabled", boolean);
        }
    
    });
    
    如果电子邮件无效,您最终可以禁用submit按钮;如果电子邮件有效,您可以启用submit按钮,只需在code
    disableBtn(true)中取消注释所有函数即可
    禁用BTN(假)

    输出示例: 下面是一个例子,通过键入有效和无效的电子邮件,您可以即时收到绿色或红色消息。当然,如果您提交了一封无效的电子邮件,那么您的流程与键入该电子邮件相同

    我使用的一些参考资料:

    • 其中的一些灵感来自于此

      • 有一种非常简单的方法来纠正此问题。将html中的
        输入类型
        文本
        更改为
        电子邮件

        <p>Email: <input type="email" id="myInput"/>  /*note the amendment*/
        <span id="feedbackDiv"></span>
        </p>
        
        电子邮件:/*请注意修改*/
        
        <form action="email.php" method="POST">
        <p>Email: <input type="email" id="myInput"/> 
        <span id="feedbackDiv"></span>
        </p>
        <p><input type="submit" id="myButton" value="Check" /></p>
        </form>
        
        $(document).ready(function() {               
        $('#Email_id').focusout(function(){  
        
        $('#Email_id').filter(function(){
        
                       var emil=$('#Email_id').val();
                  var emailReg = /^([a-z\d!#$%&'*+\-\/=?^_`{|}~\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]+(\.[a-z\d!#$%&'*+\-\/=?^_`{|}~\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]+)*|"((([ \t]*\r\n)?[ \t]+)?([\x01-\x08\x0b\x0c\x0e-\x1f\x7f\x21\x23-\x5b\x5d-\x7e\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]|\\[\x01-\x09\x0b\x0c\x0d-\x7f\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]))*(([ \t]*\r\n)?[ \t]+)?")@(([a-z\d\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]|[a-z\d\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF][a-z\d\-._~\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]*[a-z\d\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])\.)+([a-z\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]|[a-z\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF][a-z\d\-._~\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]*[a-z\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])\.?$/i;
                if( !emailReg.test( emil ) ) {
                    console.log('Please enter valid email');
                    } else {
                    console.log('Thank you for your valid email');
                    }
                    });
                });