Проверьте URL с помощью строки запроса, содержащей адрес электронной почты, используя PHP - PullRequest
0 голосов
/ 14 сентября 2018

Привет! У меня проблема с правильной проверкой 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

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

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

1 Ответ

0 голосов
/ 14 сентября 2018

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

<?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 есть # s, поэтому для временной замены вам потребуется использовать другой символ вместо #.

...