jQuery表单验证,仅允许使用.edu邮箱地址

4

我正在使用位于这里的jquery验证函数和插件。

http://docs.jquery.com/Plugins/Validation

我正在查看js文件,发现了验证电子邮件的代码块,但是我只希望允许.edu的电子邮件通过。我不知道该从哪里开始。

3个回答

7
你可以扩展它并添加自己的规则。
jQuery.validator.addMethod("edu", function(value, element) {
  // Make it work optionally OR
  //  Check the last 4 characters and ensure they match .edu
  return (this.optional(element) || value.slice(-4) == ".edu"); 
}, "You must use a .edu email address");

$("#myform").validate({
  rules: {
    field: {
      required: true,
      email: true,
      edu: true
    }
  }
});

这里有一个jsfiddle,展示了它们如何协同工作以及错误是如何级联的。只需按下按钮即可。


6

您不需要自定义扩展。您可以使用accept()方法:http://docs.jquery.com/Plugins/Validation/Methods/accept#extension

// input field
<input type="text" id="eduEmail2" name="eduEmail2" value="abc@123.edu"/>

// validation rule
eduEmail2: {
    required: true,
    email: true,
    accept: 'edu'
}

完整示例: http://jsfiddle.net/M5TmU/2/ (基于Brombomb的jsfiddle)

更新

根据xecute的评论 - 您可以使用自定义正则表达式模式。在additional-methods.js中,您有"pattern"方法(文件中的最后一个方法):

eduEmail3: {
    required: true,
    email: true,
    pattern: /(\.edu\.\w\w)$/
}

完整示例:http://jsfiddle.net/M5TmU/3/

当然它并不完美,但是 - 你不需要编写自定义方法 :)

附加编辑:国家域名只有两个字母,所以\w\w\w? 太多了 - \w\w 就可以了。我在 fiddle 中保留了\w\w\w?


本地化怎么办?“edu.fr”、“edu.tr”、“edu.ru”、“edu.de”……?他们也是大学生。 - xecute
哇,这真是太棒了! - Connor Finn McKelvey
根据文档:accept方法可以使文件上传仅接受指定的mime类型。(http://jqueryvalidation.org/accept-method) ~ 这与OP的问题有什么关系呢? - Sparky
我不明白你想告诉我什么。acceptextension方法都用于在使用type="upload"输入时验证文件上传。这也是2012年的情况。重点是,文件上传的验证与type="text"输入有什么关系? - Sparky
你是对的,我没有说得很准确。我记得当我回答2012年1月11日时,“accept”参数不仅适用于文件输入。我查看了github存储库,版本1.9.0,“accept”方法在“jquery-validate.js”文件中。它不仅绑定到文件输入,而且只是另一种验证方法。正如我在https://github.com/jzaefferer/jquery-validation/issues/287上看到的那样,这在2012年4月发生了变化。 - BartekR
显示剩余2条评论

0
您可能仍会收到非 .edu 电子邮件地址的垃圾邮件。
我建议在服务器端检查电子邮件域。
这样,电子邮件必须是 .edu,否则就无法发送。
否则,如果我在浏览器中关闭 JavaScript,我可以提交任何电子邮件地址并将其发送。

他只是想向人们展示没有.edu扩展名的电子邮件是不允许的。当然,如果您正在进行JS过滤等操作,还必须在服务器端再次进行控制。没有服务器端控制是不可接受的。 - xecute

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接