Javascript 通过php和jQuery验证电子邮件
我想通过使用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
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按钮,只需在codedisableBtn(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');
}
});
});