regex — проверка URL с помощью строки запроса, содержащей адрес электронной почты, с использованием переполнения стека

Привет у меня есть проблема с правильной проверки URL со строкой запроса, содержащей адрес электронной почты, как:

https://example.com/[email protected]

это письмо правильное [email protected] псевдоним [email protected]

У меня есть регулярное выражение, как это:

$page = trim(preg_replace('/[\\0\\s+]/', '', $page));

но это не работает, как я ожидал, потому что он заменяет + пустой строке, что не так. Это должно держать это + в качестве псевдонима адреса электронной почты и должны вырезать специальные символы при сохранении правильности адреса.

Пример неправильного URL с +:

https://examp+le.com/?email=example@exam+ple.com

Другие URL без адреса электронной почты в строке запроса должны корректно проверяться с использованием этого регулярного выражения.

Есть идеи как это решить?

0

Решение

Я думаю, это то, что вы ищете:

<?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]

Сначала я заменил действительный + подписаться на адреса электронной почты с #затем удаляем все остатки +после этого я заменил # с +,

Это решение не будет работать, если есть #s на URL, если так, вам нужно будет использовать другой символ вместо # для временной замены.

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]