【发布时间】:2017-04-08 08:10:21
【问题描述】:
我发现this 正则表达式用于电子邮件。我试图把它变成一个多行版本。但是在我这样做之后它就停止工作了:
const emailOne = /^(([^<>()\[\]\\.,;:\s@"]+(\.[^<>()\[\]\\.,;:\s@"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/
const email = RegExp(
/* eslint-disable */
'^(([^<>()\[\]\\.,;:\s@"]+(\.[^<>()\[\]\\.,;:\s@"]+)*)|' +
'(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}])|' +
'(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$'
/* eslint-enable */
)
emailOne.test('abc@gmail.com')
emailTwo.test('abc@gmail.com')
emailOne 返回true。 emailTwo 返回false。为什么会是这个原因?
编辑:
我意识到RegExp 修改了原来的正则表达式(破坏了它):
// regex created by RegExp
/^(([^<>()[]\.,;:s@"]+(.[^<>()[]\.,;:s@"]+)*)|(".+"))@(([[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}])|(([a-zA-Z-0-9]+.)+[a-zA-Z]{2,}))$/
// emailOne
/^(([^<>()\[\]\\.,;:\s@"]+(\.[^<>()\[\]\\.,;:\s@"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/
【问题讨论】:
-
@Pang 修正了答案。
-
“单行电子邮件正则表达式有效”不,它没有。您的正则表达式排除了大量完全有效的电子邮件地址。 stackoverflow.com/a/201378/362536
-
这是一个先前的问题,询问与似乎相同的正则表达式相同的问题。 stackoverflow.com/questions/12317049/… 接受的答案应该满足您的需求。
-
@Brad 这是第一个弹出的 Google 结果。我包含了链接。
-
@alex 验证电子邮件地址的最安全方法是发送一封请求用户操作的电子邮件。
标签: javascript regex