Я использовал следующее регулярное выражение для проверки псевдонимов в журналах IRC:
/<([a-zA-Z\[\]\\`_\^\{\|\}][a-zA-Z0-9\[\]\\`_\^\{\|\}-]{1,31})>/
используя его в preg_match примерно так:
preg_match('/<([a-zA-Z\[\]\\`_\^\{\|\}][a-zA-Z0-9\[\]\\`_\^\{\|\}-]{1,31})>/', $line)
Я просто проверяю, сказал ли пользователь что-то в строке, и эта строка была не просто сообщением о соединении / части, ни псевдонимом, или чем-то в этом роде, но было бы легко поместить это также в preg_replace. *
Соответствует никам в соответствии с правилами псевдонимов в RFC 2812, раздел 2.3.1 , в которых говорится, что первый символ должен быть буквой (a-zA-Z
) или специальным ([]{}^`|_\
) и остальные символы могут быть буквами, специальными символами, цифрами (0-9
) или дефисами (-
). Я выбрал максимальную длину 32, основанную на NICKLEN=32
GTAnet вместо максимальной длины RFC 9, потому что многие сети, кажется, не следуют этому стандарту. Максимальная длина зависит от сети IRC, поэтому настройте ее по мере необходимости.