JavaScript 我非常简单的正则表达式有什么问题

javascript whats wrong with my very simple regex?

本文关键字:什么 问题 正则表达式 非常 简单 JavaScript      更新时间:2023-09-26

我想以 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"等:)

编辑2 精算代码:

   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');
}

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

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

不是

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

正如我所说,整个正则表达式的事情对我来说是很新的:))

实际上,真实电子邮件地址的正则表达式并不简单,因为它应该符合 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 发布的正则表达式。

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

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

您需要转义斜杠:

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

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

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

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