接收某些特殊字符的电子邮件的正则表达式

时间:2015-06-23 12:45:56

标签: ruby regex

我使用以下正则表达式进行电子邮件验证:

VALID_EMAIL_REGEX = /\A[\w+\-.]+@[a-z\d\-]+(\.[a-z]+)*\.[a-z]+\z/i

问题是.@xyz.com也会得到验证。

我需要在正则表达式中更改哪些内容,以便在[a-z]之前检查至少有一个@字母?

2 个答案:

答案 0 :(得分:1)

您可以确保该电子邮件不是以.开头(?!\.)前瞻,并且您可以确保@之前有一封信(?<=[a-z])后视:

\A(?!\.)[\w+\-.]+(?<=[a-z])@[a-z\d\-]+(\.[a-z]+)*\.[a-z]+\z
  ^^^^^^         ^^^^^^^^^^

请参阅demo

答案 1 :(得分:1)

我不会谈论“不要使用regexp电子邮件”。让我猜一下:你可能也不希望随后有两个点。对于表达式的前面部分,我将使用/\A(\.?\w+)+@.../

['.', '.a', 'b.', 'c', 'a..b'].map { |s| s =~ /\A(\.?[\-\w]+)+\z/ }
#⇒ => [nil, 0, nil, 0, nil]

希望它有所帮助。