使用 PHP 使用包含电子邮件地址的查询字符串验证 url
Validate url with query string containing email address using PHP
您好,我在使用包含电子邮件地址的查询字符串进行正确 url 验证时遇到问题,例如:
https://example.com/?email=john+test1@example.com
这封电子邮件是正确的 john+test1@example.com
是 john@example.com
的别名
我有这样的正则表达式:
$page = trim(preg_replace('/[\0\s+]/', '', $page));
但它没有像我预期的那样工作,因为它将 +
替换为空字符串,这是错误的。它应该保留此 +
作为电子邮件地址的别名,并应在保持地址正确性的同时删除特殊字符。
错误 url 与 +
的示例:
https://examp+le.com/?email=example@exam+ple.com
查询字符串中没有电子邮件的其他 urls 应该使用此正则表达式进行正确验证
知道如何解决吗?
我想这就是你要找的:
<?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=john+test1+@example.com&email2=john+test2@exam+ple.com';
echo replace_plus_sign($page);
给出以下输出:
https://example.com/email=john+test1@example.com&email2=john+test2@example.com
首先,我用 #
替换了有效的 +
登录电子邮件地址,然后删除了所有剩余的 +
,之后,我替换了 #
与 +
.
如果 URL 上有 #
,此解决方案将不起作用,如果是这样,您将需要使用另一个字符而不是 #
进行临时替换。
您好,我在使用包含电子邮件地址的查询字符串进行正确 url 验证时遇到问题,例如:
https://example.com/?email=john+test1@example.com
这封电子邮件是正确的 john+test1@example.com
是 john@example.com
我有这样的正则表达式:
$page = trim(preg_replace('/[\0\s+]/', '', $page));
但它没有像我预期的那样工作,因为它将 +
替换为空字符串,这是错误的。它应该保留此 +
作为电子邮件地址的别名,并应在保持地址正确性的同时删除特殊字符。
错误 url 与 +
的示例:
https://examp+le.com/?email=example@exam+ple.com
查询字符串中没有电子邮件的其他 urls 应该使用此正则表达式进行正确验证
知道如何解决吗?
我想这就是你要找的:
<?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=john+test1+@example.com&email2=john+test2@exam+ple.com';
echo replace_plus_sign($page);
给出以下输出:
https://example.com/email=john+test1@example.com&email2=john+test2@example.com
首先,我用 #
替换了有效的 +
登录电子邮件地址,然后删除了所有剩余的 +
,之后,我替换了 #
与 +
.
如果 URL 上有 #
,此解决方案将不起作用,如果是这样,您将需要使用另一个字符而不是 #
进行临时替换。