客户端正则表达式电子邮件验证 - 另外检查名称的最小长度& TLD

时间:2017-05-02 11:06:37

标签: javascript jquery regex validation email

除了服务器端验证之外,我想对电子邮件输入字段进行一些客户端验证(javascript / jquery),仅接受其地址长度至少为3个字符且其tld至少为2个字符的电子邮件。

截至目前,我正在检查整个电子邮件:

HTML:

<input type="email" name="email" placeholder="E-Mail" class="form-control" id="chatemail">

的javascript:

var re_email = new RegExp(/^[a-zA-Z0-9\_\.\-]+@[a-zA-Z0-9\-]+(?:\.[a-zA-Z]+)$/);
var is_email = re_email.test($('#chatemail').val());

// and its length like this:
$('#chatemail').val().length > 5

但另外如何查看电子邮件的结尾,例如: @ gmx.de

......'gmx'长度至少为3位,'de'长度至少为2位?所以我不想要的是有人可以输入@ g.d或@ gm.c ...以及类似的东西......

我试图拆分正则表达式...但我的尝试不起作用......

var re_email_01 = /^[a-zA-Z0-9\_\.\-]$/;
var re_email_02 = /^@[a-zA-Z0-9\-]$/;
var re_email_03 = /^(?:\.[a-zA-Z]+)$/;

var re_email = new RegExp(re_email_01+'+'+re_email_02+'+'+re_email_03);

我也试过了......

var re_email = new RegExp(/^[a-zA-Z0-9\_\.\-]+@[a-zA-Z0-9\-]{3,}+(?:\.[a-zA-Z]{2,}+)$/);

3 个答案:

答案 0 :(得分:1)

您的电子邮件正则表达式非常严格。回答这个问题,你可以重新编写你的模式,以满足你的要求:

var re_email = /^[-.\w]+@(?![^.]{0,2}\.[a-zA-Z]{2,}$)([-a-zA-Z0-9]+\.)+[a-zA-Z]{2,}$/;

请参阅regex demo

你不应该在限制量词(+构造)之后添加{min,max},JS正则表达式不支持像Java或PCRE这样的占有量词,它是一个无效的构造。此外,不需要将new RegExp与静态模式一起使用,只需使用正则表达式文字。

这里的一个重要部分是(?![^.]{0,2}\.[a-zA-Z]{2,}$)否定前瞻:如果域部分除了点之外只有0到2个字符,然后是一个点和2个或更多字母,它就会失败。

另请注意,[a-zA-Z0-9_]与JS regex中的\w匹配,当您将-放在字符类的开头时,您无需将其转义为解析为字面连字符。

模式详情

  • ^ - 字符串开头
  • [-.\w]+ - 一个或多个-.或字母数字/ _符号
  • @ - @符号
  • (?![^.]{0,2}\.[a-zA-Z]{2,}$) - 除了.之后不能有0到2个字符,后跟.,然后在{{1}右边的字符串末尾有2个或更多字母1}}
  • @ - 一个或多个([-a-zA-Z0-9]+\.)+或字母数字字符序列后跟一个点
  • - - 2个或更多ASCII字母
  • [a-zA-Z]{2,} - 字符串结束。

答案 1 :(得分:0)

我使用html5内置函数进行电子邮件验证:

function emailValid(emailAddy){
  var email = document.createElement('input');
  email.type = 'email';
  email.value = emailAddy;
  return email.validity.valid; 
};

alert (emailValid('ttt@gmx.de'));
alert (emailValid('tt t@gm x.de'));

js fiddle

答案 2 :(得分:0)

您可以根据自己的要求使用以下正则表达式:

/^[.-\w]+@[\w\-]{3,}((.)\w{2,})+$/

这允许在电子邮件地址的第一部分中使用字母,数字和( - ,_ ,.),并确保在'@'之后至少有3个字符,然后在点(。)之后至少为2。这个正则表达式还负责确保后续的点(。)之后还有2个字符,就像你在规则中提到的一样。

Refiddle demo

样品:

// Matching
abc@gmx.dcom
newemail@gmail.com
8-d_873@abc.co
abc.deg@new.co
abc@9mail.co
d@mail.com
abc.deg@new.co.uk

// Not matching
abc@gmc.d
abc@gm.de
d@ma.com
d@
9@99.213
first.name@gmx...de