我想知道下面的代码是否是使用正则表达式使用preg_match检查街道地址,电子邮件地址,密码,城市和网址的正确方法?
如果没有,我应该如何修复preg_match代码?
preg_match ('/^[A-Z0-9 \'.-]{1,255}$/i', $trimmed['address']) //street address
preg_match ('/^[\w.-]+@[\w.-]+\.[A-Za-z]{2,6}$/', $trimmed['email'] //email address
preg_match ('/^\w{4,20}$/', $trimmed['password']) //password
preg_match ('/^[A-Z \'.-]{1,255}$/i', $trimmed['city']) //city
preg_match("/^[a-zA-Z]+[:\/\/]+[A-Za-z0-9\-_]+\\.+[A-Za-z0-9\.\/%&=\?\-_]+$/i", $trimmed['url']) //url
答案 0 :(得分:1)
您的街道地址:^[A-Z0-9 \'.-]{1,255}$
dot
class,它将允许所有char(除了
新队)。如此有效的正则表达式变为^.{1,255}$
您的电子邮件正则表达式:^[\w.-]+@[\w.-]+\.[A-Za-z]{2,6}$
.
类。解决这个问题。您的密码正则表达式:^\w{4,20}$
您的城市正则表达式:^[A-Z \'.-]{1,255}$
.
修改强>
由于您对正则表达式不熟悉,请花些时间在Regular-Expressions.info
上答案 1 :(得分:1)
这对我来说似乎过于复杂。特别是我可以看到一些不起作用的东西:
(假设你的意思是“\。”而不是“。”,因为“。”匹配任何东西)
等等。一般来说,我认为过度依赖正则表达式进行验证并不是一件好事。你可能最好不要为这些领域提供任何东西,只是以其他方式验证它们。
例如,使用电子邮件地址:仅仅因为根据RFC标准地址有效并不意味着您实际上可以向其发送电子邮件(或者它是正确的电子邮件该人的地址)。验证电子邮件地址的唯一可靠方法是实际向其发送电子邮件,并让此人点击链接或其他内容。
与URL相同:只是因为它根据标准有效并不意味着那里有一个网页。您可以通过尝试执行获取页面的实际请求来验证URL。
但我个人的偏好是尽可能地进行绝对最低限度的验证,并留待它。让人们编辑他们的个人资料(或者你正在验证的任何东西),以防他们犯错误。
答案 2 :(得分:0)
检查这些东西并不是一种“正确”的方法。这取决于您的要求是什么。
对于电子邮件地址和网址,我建议您使用filter_var
而不是正则表达式 - 只需将其传递给FILTER_VALIDATE_EMAIL
或FILTER_VALIDATE_URL
。
使用其他正则表达式,您需要确保逃脱。在字符类中(否则它将允许所有内容),您可能想要考虑City / Street允许垃圾,例如'''''
,或只是空格。
答案 3 :(得分:0)
请不要假设您知道地址是如何组成的。有成千上万的城市,乡镇和村庄,其中包括&以及来自其他字母的那些。
除非您通过特定于某个国家/地区的API执行此操作,否则请勿尝试验证地址(例如,美国的USPS)。
为什么要限制用户密码中的字符?除了现有密码之外,对密码没有任何要求。
如果您使用这些正则表达式,您的网站将无法使用。