我发现一些文章和帖子建议不要使用正则表达式来验证用户数据。我不确定所有事情,但我通常在电子邮件地址验证时找到它。
所以我想清楚使用正则表达式来验证用户输入是否好?如果它很好,那么它验证电子邮件地址有什么不好呢?
Edit:
因此,我们可以说,对于数据类型的基本主要验证,我们可以使用正则表达式,它很好,而对于完整验证,我们需要将其与另一个解析器结合起来。
对于一般用途的电子邮件验证的第二部分,我们可以使用它,但根据标准,它是不合适的。是吗?
现在在选择正确答案时感到困惑
这很好,因为您可以使用正则表达式以简单的方式表达和测试复杂的模式。
这很糟糕,因为正则表达式可能很复杂,而且你可能会做错很多事情。
Edit好吧,好吧。这里有一些真正的建议:首先确保可以使用正则表达式来表达预期的有效值。也就是说,有效值的语言是常规语言 http://en.wikipedia.org/wiki/Regular_language。否则你根本无法使用正则表达式(或者至少不能仅使用正则表达式)!
既然我们知道可以使用正则表达式验证什么,我们应该讨论使用正则表达式验证什么是可行的。如果我们以电子邮件地址为例(像许多其他人一样),我们应该知道什么是合法的邮件地址 https://www.rfc-editor.org/rfc/rfc5322#section-3.4可能看起来像(参见 RFC 5322):
addr-spec = local-part "@" domain
local-part = dot-atom / quoted-string / obs-local-part
domain = dot-atom / domain-literal / obs-domain
domain-literal = [CFWS] "[" *([FWS] dtext) [FWS] "]" [CFWS]
dtext = %d33-90 / ; Printable US-ASCII
%d94-126 / ; characters not including
obs-dtext ; "[", "]", or "\"
在这里我们看到本地部分可能由一个带引号的字符串可能包含任何可打印的 US-ASCII 字符(不包括\
and "
”,但包括@
)。因此,仅测试电子邮件地址是否仅包含一个是不够的@
如果我们想根据 RFC 5322 允许地址。
另一方面,如果我们想要根据 RFC 5322 允许任何有效的电子邮件地址,我们也会允许在大多数情况下可能不存在或毫无意义的地址(例如""@localhost
).
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)