嗨,我有正确的URL验证问题,查询字符串包含电子邮件地址,如:
https://example.com/[email protected]
这封电子邮件是正确的一个[email protected]
是[email protected]
的别名
我有这样的正则表达式:
$page = trim(preg_replace('/[\\0\\s+]/', '', $page));
但它没有像我预期的那样工作,因为它取代了+
来清空错误的字符串。它应该将此+
保留为电子邮件地址的别名,并应在保持地址正确性的同时删除特殊字符。
使用+
的错误网址示例:
https://examp+le.com/?email=example@exam+ple.com
查询字符串中没有电子邮件的其他网址应使用此正则表达式进行正确验证
知道怎么解决吗?
我认为这就是你要找的东西:
<?php
function replace_plus_sign($string){
return
preg_replace(
'/#/',
'+',
preg_replace(
'/\++/i',
'',
preg_replace_callback(
'/(email([\d]+)?=)([^@]+)/i',
function($matches){
return $matches[1] . preg_replace('/\+(?!$)/i', '#', $matches[3]);
},
$string
)
)
);
}
$page = 'https://exam+ple.com/[email protected]&email2=john+test2@exam+ple.com';
echo replace_plus_sign($page);
给出以下输出:
https://example.com/[email protected]&[email protected]
起初,我用+
替换了电子邮件地址上的有效#
标志,然后删除所有剩余的+
,之后,我用#
替换了+
。
如果URL上有#
s,则此解决方案将无法工作,如果这样,您将需要使用另一个字符而不是#
进行临时替换。