我使用简单的正则表达式模式验证电子邮件地址,我发现了这种模式:
^[^@]+@[^@]+\.[^@]+$
当我检查regex101上的模式时,它的行为符合预期(意味着它不会匹配,例如email@abcde
)。
以下一行:
/^[^@]+@[^@]+\.[^@]+$/.test('email@abcde'); // false
可是:
let patt = new RegExp('^[^@]+@[^@]+\.[^@]+$');
patt.test('email@abcde'); // true
什么?!,我在chrome和firefox上测试过,同样的行为,任何人都可以解释一下吗?
答案 0 :(得分:0)
\.
不是字符串文字中的有效转义序列,它只是解析为.
。这意味着您在第二个示例中使用的正则表达式等同于
^[^@]+@[^@]+.[^@]+$
.
匹配任何角色。
如果将两个正则表达式都记录到控制台,则可以轻松查看差异:
答案 1 :(得分:0)
问题是您的正则表达式中\.
被评估为.
。换句话说,您的正则表达式实际上是:^[^@]+@[^@]+.[^@]+$
要修复,请使用//
正则表达式分隔符:
patt = /^[^@]+@[^@]+\.[^@]+$/
patt.test("email@abcde") // false
patt.test("email@abcde.com") // true