【发布时间】:2019-02-19 05:03:25
【问题描述】:
您好,我在使用包含电子邮件地址的查询字符串进行正确的 url 验证时遇到问题,例如:
https://example.com/?email=john+test1@example.com
这封电子邮件是正确的,其中john+test1@example.com 是john@example.com 的别名
我有这样的正则表达式:
$page = trim(preg_replace('/[\\0\\s+]/', '', $page));
但它没有像我预期的那样工作,因为它将+ 替换为空字符串出了什么问题。它应该将此+ 保留为电子邮件地址的别名,并应在保持地址正确性的同时删除特殊字符。
+ 的错误网址示例:
https://examp+le.com/?email=example@exam+ple.com
查询字符串中没有电子邮件的其他网址应使用此正则表达式正确验证
知道如何解决吗?
【问题讨论】:
-
我建议您使用regexr.com 进行测试,它可能非常有用
-
为什么需要将电子邮件作为 GET 参数传递?你不能以不同的方式构建你的逻辑吗?
-
您应该 urlencode() 在 URL 中作为查询参数发送的任何值。否则,浏览器将解释特殊字符(如
+是空格的替代品)。浏览器无法知道您需要文字加号。另外,为什么要将查询字符串作为 URL 的一部分进行验证?你能解释一下那个“验证”到底是干什么用的吗? -
试试
preg_replace('~[\0\s]+|\++(?=.*\?)|(\?.*)~', '$1', $s) -
这是一段旧代码,其中函数 x 使用此 url 设置 header() 以将用户重定向到带有查询字符串中的电子邮件地址的自定义 url,并且用户可以使用
+设置他的电子邮件,它使一个问题
标签: php regex url email-validation url-validation