【问题标题】:Validate corporate emails in validate.js script在 validate.js 脚本中验证公司电子邮件
【发布时间】:2015-04-12 01:08:14
【问题描述】:

如何在 Validate.js 插件中验证公司电子邮件?防止用户输入非公司电子邮件。 @gmail.com、@yahoo.com、@hotmail.com 等电子邮件。

这是 Validate.js 主脚本中电子邮件验证的一部分:

email: function( value, element ) {
            return this.optional( element ) || /^[a-zA-Z0-9.!#$%&'*+\/=?^_`{|}~-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*$/.test( value );
        }

【问题讨论】:

  • 如果你有一组明确的不允许的域(或允许的),那就更容易了。
  • 我有一组不允许的域。正如我提到的,Gmail、雅虎、hotmail。
  • 你关心
  • 是的。 HTML5 不适合这里!
  • 您不应该编辑插件的源代码。 相反,请使用下面答案中的自定义函数通过.addMethod() 方法制作自定义电子邮件规则。见:stackoverflow.com/questions/241145/…

标签: javascript jquery jquery-validate


【解决方案1】:

解决此问题的一种简洁方法是将域名提取到变量中(通过在 @ 之后获取子字符串),然后根据域数组检查值。

在正则表达式中执行此操作对于将来要阅读此代码的人来说是一场噩梦!

例子:

var email = "name@example.com";
var domainName = email.slice((email.indexOf("@") + 1), email.length);

然后检查domainName是否在域列表中。

【讨论】:

  • 由于您没有展示如何操作,因此此帖子更像是评论而不是答案。
【解决方案2】:

添加异常并针对它们进行验证..

在您的情况下,您可以使用多列正则表达式并像这样对它们进行验证..

  var regex1 =   what-ever-regex-is-@yahoo.com
  var regex2 =   what-ever-regex-is-@hotmail.com
  var regex3 =   what-ever-regex-is-@gmail.com
  var regex4 =   what-ever-regex-is-@live.com

并使用!在返回之前..这意味着如果其中一个存在,您的支票将返回 true 但是!将更改符号,使其为假,并在您的代码中相应地使用它。

 email: function( value, element ) {
        return (this.optional( element ) || 
 /^[a-zA-Z0-9.!#$%&'*+\/=?^_`{|}~-]+@yahoo.com$/.test( value ) 
    || /^[a-zA-Z0-9.!#$%&'*+\/=?^_`{|}~-]+@hotmail.com$/.test( value )  );
    }

另一种方法是将所有这些已知域合并到一个正则表达式中并对其进行检查。

【讨论】:

  • @AmroShahbari 你能看到我修改了你的函数吗..将你的函数更改为多个函数..
  • 所以你需要像我一样添加其余的......它应该只接受hotmail和yahoo......你需要添加更多
  • 代码应该阻止 Yahoo 和 hotmail。不接受!
  • 是的..如果检查为真...这意味着它包含这些电子邮件之一,警告无效消息..这就像通过矛盾解决它
  • @AmroShahbari 不要添加正则表达式 1 2 或 3.. 使用我编写的代码的第二部分.. 正则表达式已经存在..
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-03-17
  • 2022-08-18
  • 1970-01-01
  • 2021-08-10
  • 1970-01-01
  • 1970-01-01
  • 2022-06-16
相关资源
最近更新 更多