如何使正则表达式忽略所有空格和换行符

时间:2015-01-29 07:41:25

标签: regex

请帮助我正则表达我是新手。我正在检查文本和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

请更新此正则表达式以避免或跳过空格和换行符。谢谢!!

2 个答案:

答案 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 
      )
      . 
 )*
 $