请帮助我正则表达我是新手。我正在检查文本和textarea字段中是否存在电子邮件。当我检查它而不在电子邮件字符串之间放置空格时,我的正则表达式工作。例如: raza chohan @ gm ail。 co m
但我希望它忽略空格和换行符,无论它们出现在哪里。以下是我的正则表达式:
/^(.(?!([a-z0-9._-](\s|\r\n|\n|\r){0,}(at|@)(\s|\r\n|\n|\r){0,}[a-z0-9._-]{2,}(\s|\r\n|\n|\r){0,}[a-z0-9._-]{0,}(\s|\r\n|\n|\r){0,}(\.|dot)(\s|\r\n|\n|\r){0,}[a-z]{2,})))*$/im
请更新此正则表达式以避免或跳过空格和换行符。谢谢!!
答案 0 :(得分:0)
正如collapsar所提到的,正则表达式并不是您可以使用的唯一工具。从你想要如何改变空格匹配的问题来看,并不完全清楚,但在检查电子邮件地址之前,请考虑从字符串中删除空格(或至少是换行符)。然后你的正则表达式可以简化。
此外,使用\b
(与单词边界匹配)可能比明确提及所有类型的空格更容易。
regular-expressions.info对电子邮件匹配有很好的建议。
答案 1 :(得分:0)
通常,Dot metachar默认不包含换行符
不确定R,但你确实设置了//m
标志(多线模式)
这可能意味着点包括换行符。
无论哪种方式,您都可以通过将所有\ s | \ r \ n的内容移动到单独的替换中来获得等效内容。
这是你的原作,在匹配字符后的负向前瞻。
# /^(.(?!([a-z0-9._-](at|@)[a-z0-9._-]{2,}[a-z0-9._-]{0,}(\.|dot)[a-z]{2,})|\s))*$/im
^
(
.
(?!
(
[a-z0-9._-]
( at | @ )
[a-z0-9._-]{2,}
[a-z0-9._-]{0,}
( \. | dot )
[a-z]{2,}
)
|
\s
)
)*
$
这应该是这样的。
# /^((?!([a-z0-9._-](at|@)[a-z0-9._-]{2,}[a-z0-9._-]{0,}(\.|dot)[a-z]{2,})|\s).)*$/im
^
(
(?!
(
[a-z0-9._-]
( at | @ )
[a-z0-9._-]{2,}
[a-z0-9._-]{0,}
( \. | dot )
[a-z]{2,}
)
|
\s
)
.
)*
$