2

我想以 html 形式验证电子邮件地址。我对正则表达式知之甚少。

验证很简单,只是为了匹配any_symbols@any_symbols.two_to_eight_symbols模式。

这是我正在尝试使用的正则表达式^.+@.+\..{2,8}$。然而它不起作用,它验证了 pattern any_symbols@four_symbols

注意:不要担心这种简单的验证,在服务器端我正在做filter_var(php)并将令牌发送到该电子邮件。当输入的电子邮件地址符合一些理智的模式时,只需要在表单上启用按钮 :)

编辑我在问题中提到的那些模式“any_symbols ...”只是我试图输入的文本表示。这不是我在输入字段中输入的内容 :) 通常我输入“test@test.com”或“blabla@hehe.haha”等 :)

EDIT2实际代码:

   var email_regex = new RegExp("^.+@.+\..{2,8}$");
if ($target.val().match(email_regex) !== null){
    $button.removeAttr('disabled').removeClass('disabled');
}
else{
    $button.attr('disabled', 'disabled').addClass('disabled');
}

EDIT3 *发现问题!* 这不是正则表达式本身,而是我将正则表达式传递给正则表达式函数的方式......应该是

 new RegExp(/^.+@.+\..{2,8}$/);

不是

new RegExp("^.+@.+\..{2,8}$");

正如我所说,这整个正则表达式对我来说很新:))

4

3 回答 3

1

不是 Javascript 专家,但根据您的定义,any_symbols@any_symbols.two_to_eight_symbols我认为这可能有效:

^[^@]+@[^.]+\..{2,8}$
于 2012-04-25T14:48:23.763 回答
1

假设真实电子邮件地址的正则表达式并不简单,因为它应该符合 RFC 标准。

但是,如果这对您有用,我使用它没有问题:

// The regex: /^[_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*(\.[a-z]{2,4})$/

// To test it:
var regex = new RegExp(/^[_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*(\.[a-z]{2,4})$/);

if( regex.test( your_string ) ){ ... } // returns true if valid

如果你真的需要接受任何符号,你可以使用 Birei 发布的正则表达式。

于 2012-04-25T14:54:14.620 回答
1

您需要转义斜线:

'any_symbols@four_symbols'.match('^.+@.+\\..{2,8}$');
                                        ^^

否则,JavaScript 将读取\.为未知的转义序列并忽略斜杠

对于未列出的字符 [...],前面的反斜杠将被忽略,但这种用法已被弃用,应避免使用。

(该死的,这很难发现......)

于 2012-04-25T15:02:10.603 回答