javascript正则表达式 - 我的非常简单的正则表达式错了吗?

时间:2012-04-25 14:35:40

标签: javascript regex

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

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

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

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

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

EDIT2 Actuall代码:

   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 * 发现了问题! *这不是正则表达式本身,它是我如何将正则表达式传递给Regex函数...它应该是

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

不是

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

正如我所说,整个正则表达式对我来说都是新鲜事:))

3 个答案:

答案 0 :(得分:1)

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

^[^@]+@[^.]+\..{2,8}$

答案 1 :(得分: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发布的正则表达式。

答案 2 :(得分:1)

你需要逃避斜线:

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

否则,JavaScript会将\.读作未知转义序列并ignores the slash

  

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

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