【问题标题】:Javascript: Email Validation [duplicate]Javascript:电子邮件验证 [重复]
【发布时间】:2014-05-11 12:26:24
【问题描述】:

我在使用函数 validateEmail (str) 的电子邮件验证代码时遇到问题。有什么建议吗?

//validates email address form
function validateEmail (str)
    {
    var retVal;
    var atpos=retVal.indexOf("@");
    var dotpos=retVal.lastIndexOf(".");
    if (atpos<1 || dotpos<atpost+2 || dotpos+2>=retVal.length)
    {
    retVal = false;         
    return retVal;
    }

【问题讨论】:

  • 我使用&lt;form name="PizzaForm"&gt; &lt;font face="Courier New"&gt; Email: &amp;nbsp;&amp;nbsp;&lt;input name="email" type="text" size="50"/&gt;&lt;br/&gt;&lt;/font&gt;&lt;/p&gt;&lt;input type="button" onClick="doSubmit()" value="Submit Order"/&gt;&lt;/form&gt;的基本形式
  • 代码中的实际错误是 atpost 是错字。不过,请参阅我的回答,了解您应该如何执行此操作。
  • 什么你有什么问题吗?另外,请发布完整的功能,而不仅仅是它的开头。
  • 你知道@符号的右边有一个IP地址是完全有效的,对吧?
  • @user3625451 你知道你可以edit你的问题而不是在cmets中添加重要的东西吗?请前往帮助中心了解本网站的运作方式。我们不是论坛!

标签: javascript validation email


【解决方案1】:

有什么建议吗?是的。不要。

<input type="email" />

问题解决了!


应该注意的是,使用 HTML5 功能将打造一个漂亮的网络……只要浏览器支持它。原因是,失败的验证将导致浏览器以非侵入性且一致的原生方式通知用户错误。

较旧的浏览器将无法以这种方式进行验证,但是由于规范指出无法识别的type 值应默认为text,HTML5 完全向后兼容,可以回到 IE5.5 甚至几乎可以肯定更早 - 甚至可能是 IE1!

这种缺乏验证不是问题。验证应该总是在服务器端处理,不管你在客户端有什么验证。例如,在 PHP 中,您可以使用 FILTER_VALIDATE_EMAIL 过滤器将其传递给 filter_var

【讨论】:

  • 这不适用于旧版浏览器(主要是 Internet Explorer
  • @Sebb 所以?在我看来,坚持禁用 Windows 更新的人应该受到不那么漂亮的网络的惩罚。
  • @NiettheDarkAbsol 是的,但如果你是一名商业程序员,你不可能仅仅因为你认为他们的 IT 管理员应该启用 win 更新而将许多客户拒之门外。
  • 所以也许 OP 正在为运行 IE8 或 IE9 的公司写一些东西。
  • @NiettheDarkAbsol 问题不在于浏览器站点验证,而是使用大多数公司仍在使用的浏览器不支持的 html5 元素。我对此也不满意,但您不能仅仅因为您的想法与他们的管理员/老板不同而将商业客户拒之门外。
【解决方案2】:

你的代码的问题是你创建了一个空变量(var retVal)然后你检查这个变量而不是给定的字符串:

var retVal;
var atpos=retVal.indexOf("@");
var dotpos=retVal.lastIndexOf(".");

正确的代码是

function validateEmail (str)
{
  var retVal;
  var atpos=str.indexOf("@");
  var dotpos=str.lastIndexOf(".");
  if (atpos<1 || dotpos<atpost+2 || dotpos+2>=str.length)
  {
    retVal = false;         
    return retVal;
  }
  // further code
}

【讨论】:

  • 我很困惑,“正确的代码”和我的原始代码有什么区别?我还在上一段中调用了 retVal function validateText() { var retVal = true; if (0 == document.PizzaForm.email.value.length){validationMessages += "\nEmail field is missing."; retVal = false;} return retVal;}
  • 该函数有一个参数 - str - 它可能包含要检查的字符串。在您的原始代码中,您创建一个名为 retVal 的新 empy 变量,然后检查 this 变量是否存在一封电子邮件,显然失败了。
猜你喜欢
  • 2019-11-12
  • 2010-10-19
  • 2011-07-16
  • 2011-06-21
  • 2013-09-25
  • 2012-05-20
  • 2013-01-18
  • 2013-02-12
  • 2011-04-06
相关资源
最近更新 更多