我一直在寻找一些建议不要使用正则表达式来验证用户数据的文章和帖子。我不确定所有的事情,但我通常会在电子邮件地址验证的情况下找到它。
所以我想清楚使用正则表达式来验证用户输入是否好?如果它是好的,那么它用于验证电子邮件地址有什么坏处?
编辑:
所以我们可以说,对于数据类型的基本主要验证,我们可以使用正则表达式,它很好,而对于完全验证,我们需要将它与另一个解析器结合起来。
对于一般使用的电子邮件验证的第二部分,我们可以使用它,但按照标准,它是不合适的。是吗?
现在在选择正确的一个答案时感到困惑
最佳答案
这很好,因为您可以使用正则表达式以简单的方式表达和测试复杂的模式。
这很糟糕,因为正则表达式可能很复杂,而且你可能会做错很多事情。
编辑 好吧,好吧。这里有一些真实的建议:首先确保预期的有效值完全可以使用正则表达式来表达。那就是当有效值的语言是 regular language 时.否则,您根本无法使用正则表达式(或至少不能仅使用正则表达式)!
既然我们知道可以使用正则表达式验证什么,我们应该讨论使用正则表达式验证什么是可行的。如果我们以电子邮件地址为例(就像许多其他人所做的那样),我们应该知道什么是 valid e-mail address可能看起来像(参见 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 字符(不包括
\
和 "
”,但包括 @
)。因此不足以测试是否如果我们想根据 RFC 5322 允许地址,则电子邮件地址仅包含一个 @
。另一方面,如果我们想根据 RFC 5322 允许任何有效的电子邮件地址,我们也将允许可能不存在或在大多数情况下毫无意义的地址(例如
""@localhost
)。
关于regex - 使用正则表达式验证数据是否正确?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3274701/