客户端/服务器端JavaScript中的电子邮件验证

时间:2012-03-22 14:12:55

标签: php javascript email-validation

我知道这个问题将被关闭,因为我研究了很多这方面的例子,但请看我认为我做的事情不同。

我使用以下代码编写了我的服务器端PHP电子邮件验证:

if (!filter_var($user_new_email, FILTER_VALIDATE_EMAIL)) {
        $errors .="Email,"; 
        $pass    = false;
             }

我的客户端电子邮件验证是:

function validateEmail(txtEmail){
 var a = document.getElementById(txtEmail).value;
 var filter = /^[a-zA-Z0-9_.-]+@[a-zA-Z0-9]+[a-zA-Z0-9.-]+[a-zA-Z0-9]+.[a-z]{1,4}$/;
   if(filter.test(a)){
    return true;
   }
   else{
    return false;
   }

所以在我的客户端,如果我只输入username @ domain(没有.com),那么它是有效的。我不希望这样。

我需要在客户端和服务器端都使用相同的验证。 如何在JavaScript中更新我的正则表达式?

3 个答案:

答案 0 :(得分:3)

逃脱最后的'。'你的正则表达式中的(点)。如果没有转义或在括号内,则一个点匹配除新行之外的任何字符。因此filter的正确值为:

var filter = /^[a-zA-Z0-9_.-]+@[a-zA-Z0-9]+[a-zA-Z0-9.-]+[a-zA-Z0-9]+\.[a-z]{1,4}$/;

答案 1 :(得分:2)

@Diego有你正在寻找的答案,但有几个原因,如果你在你的javascript中完全验证它真的没关系:

  1. 始终可以绕过客户端验证。您必须在服务器端进行完整的验证,因此客户端验证主要是对您的常规用户的礼貌。最多,它可以提供有关表单错误的快速反馈,并为您节省一些请求。
  2. 验证电子邮件地址很难。根据RFC 2822和5322,大多数验证器(包括您的JavaScript示例)过于严格。请阅读this article以了解有效地址的奇怪性。

答案 2 :(得分:0)

使用jquery验证插件,它非常易于使用和自定义 eg.Jquery Validation Plugin和Position Absolute Jquery验证插件