检测错误的电子邮件地址,例如“hi @ myio..io”
VALID_EMAIL_REGEX = /\A[\w+\-.]+@[a-z\d\-.]+\.[a-z]+\z/i
VALID_EMAIL_REGEX_FULL = /\A[\w+\-.]+@[a-z\d\-]+(\.[a-z]+)*\.[a-z]+\z/i
第一个失败。第二次成功。
我不明白这部分是如何与众不同的? (\.[a-z]+)*\.[a-z]
谢谢!
答案 0 :(得分:1)
更好的答案是使用正则表达式来匹配电子邮件地址是一个坏主意。例如,所有有效地址不活动。 hd1@jsc.d8u.us是我,hd2 @ jsc.d8u.us是现有的每个RFC的有效电子邮件地址,但它不是活动的电子邮件帐户。
如果你想进行电子邮件地址验证,你可能会比设置一个只接受字符串的Web服务更糟糕,使用JavaMail的地址解析(InternetAddress.parse()),throws an exception如果解析失败并返回地址,如果成功。示例代码如下:
public class ValidationServlet extends HttpServlet {
protected void doHead(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
String candid8Address = request.getParameter("email");
try {
InternetAddress.parse(candid8Address);
response.setStatus(HttpServletResponse.SC_OK);
} catch (AddressException e) {
response.setStatus(HttpServletResponse.SC_NOT_FORBIDDEN);
}
}
}
如果您需要进一步的帮助,请告诉我......
答案 1 :(得分:0)
在第一个@[a-z\d\-.]
中,.
与包含.
的任何字符匹配。应将其删除,以便域只匹配字母数字字符。它应该是:
/\A[\w+\-.]+@[a-z\d\-]+\.[a-z]+\z/i
答案 2 :(得分:0)
试试这个:
/ ^([\ w%的+ - 。] +)@([\瓦特 - ]。+)+([\ W] {2,})$ / I
验证电子邮件地址
答案 3 :(得分:0)
请尝试以下方法: -
/\A([^@\s]+)@((?:[-a-z0-9]+\.)+[a-z]{2,})\Z/i
答案 4 :(得分:0)
我曾经发现过这个:
# RFC822 Email Address Regexp
# ---------------------------
#
# Originally written by Cal Henderson
# c.f. http://iamcal.com/publish/articles/php/parsing_email/
#
# Translated to Ruby by Tim Fletcher, with changes suggested by Dan Kubb.
#
# Licensed under a Creative Commons Attribution-ShareAlike 2.5 License
# http://creativecommons.org/licenses/by-sa/2.5/
#
# (see: http://tfletcher.com/lib/rfc822.rb)
RFC822 = begin
qtext = '[^\\x0d\\x22\\x5c\\x80-\\xff]'
dtext = '[^\\x0d\\x5b-\\x5d\\x80-\\xff]'
atom = '[^\\x00-\\x20\\x22\\x28\\x29\\x2c\\x2e\\x3a-' +
'\\x3c\\x3e\\x40\\x5b-\\x5d\\x7f-\\xff]+'
quoted_pair = '\\x5c[\\x00-\\x7f]'
domain_literal = "\\x5b(?:#{dtext}|#{quoted_pair})*\\x5d"
quoted_string = "\\x22(?:#{qtext}|#{quoted_pair})*\\x22"
domain_ref = atom
sub_domain = "(?:#{domain_ref}|#{domain_literal})"
word = "(?:#{atom}|#{quoted_string})"
domain = "#{sub_domain}(?:\\x2e#{sub_domain})*"
local_part = "#{word}(?:\\x2e#{word})*"
# The following line was needed to change for ruby 1.9
# was: addr_spec = "#{local_part}\\x40#{domain}"
addr_spec = Regexp.new("#{local_part}\\x40#{domain}", nil, 'n')
pattern = /\A#{addr_spec}\z/
end.freeze