[英]Validate url with query string containing email address using PHP
嗨,我在使用包含電子郵件地址的查詢字符串進行正確的URL驗證時遇到問題:
https://example.com/?email=john+test1@example.com
這封電子郵件是OFC正確john+test1@example.com
是一個別名john@example.com
我有這樣的正則表達式:
$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=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
起初,我更換了有效+
上的電子郵件地址標志用#
,然后刪除所有remainings +
,在那之后,我更換了#
與+
。
如果URL上有#
則此解決方案將不起作用,因此您需要使用其他字符代替#
進行臨時替換。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.