Javascript:电子邮件验证

Javascript:电子邮件验证,javascript,validation,email,Javascript,Validation,Email,我在使用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 || dot

我在使用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;
    }
//验证电子邮件地址表单
函数validateEmail(str)
{
var-retVal;
var atpos=返回索引(“@”);
var dotpos=retVal.lastIndexOf(“.”);

如果(atpos有什么建议吗?是的,不要

<input type="email" />

问题解决了


需要注意的是,如果浏览器支持HTML5功能,使用HTML5功能将有助于创建一个漂亮的web。原因是,验证失败将导致浏览器以非侵入性、一致性、本地方式通知用户错误

较旧的浏览器将无法以这种方式进行验证,但是,由于规范规定未识别的
类型
值应默认为
文本
,HTML5完全向后兼容,可以追溯到IE5.5甚至更早,甚至可以肯定是IE1


缺少验证不是问题。验证应该始终在服务器端处理,而不管客户端有什么验证。例如,在PHP中,您可以使用
过滤器\u VALIDATE\u电子邮件
过滤器传递验证。

代码的问题是您创建了一个空变量(
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
}
函数validateEmail(str)
{
var-retVal;
var atpos=str.indexOf(“@”);
var dotpos=str.lastIndexOf(“.”);

如果(atposI使用的是
电子邮件的基本形式:

您的代码中的实际错误是
atpost
是打字错误。请查看我的答案,了解您应该如何做到这一点。您有什么问题吗?另外,请发布完整的功能,而不仅仅是它的开头。您意识到,@符号的右侧有一个IP广告是完全有效的。)着装,对吗?@user3625451您知道您可以在评论中添加您的问题,而不是添加重要内容吗?请转到帮助中心了解此网站的工作原理。我们不是论坛!这在较旧的浏览器中不起作用(主要是Internet Explorer<10)或者safari。@Sebb-So?在我看来,坚持禁用Windows Update的人应该受到一个不那么漂亮的网站的惩罚。@NiettheDarkAbsol是的,但是如果你是一个商业程序员,你不可能仅仅因为你认为他们的IT管理员应该启用win Update就把很多客户拒之门外。所以,也许OP是在为一家公司写东西o正在运行IE8或IE9。@NiettheDarkAbsol问题不在于浏览器站点验证,而在于使用了大多数公司仍在使用的浏览器中不支持的html5元素。我对此也不满意,但你不能仅仅因为你的想法与他们的管理员/老板不同就将商业客户拒之门外。我很困惑,这有什么区别在“正确的代码”和我的原始代码之间?我还在上一段中调用了retVal
函数validateText(){var retVal=true;if(0==document.PizzaForm.email.value.length){validationMessages+=“\nEmail字段丢失。@retVal=false;}return retVal;}
该函数有一个参数-
str
,它可能包含要检查的字符串。在原始代码中,您创建了一个名为
retVal
的新empy变量,并将此变量检查为电子邮件,这显然是失败的。