[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Регулярные выражения и нижнее подчеркивание
vegasmoscow
Здравствуйте, форумчане!

Два дня бьюсь с формой авторизации. Проблема с регулярным выражением. Не до конца понимаю логику его действия. Приведу фрагмент кода:

$pattern_login = "/^[A-z0-9]+$/";

// Проверяем поле Логин
if (!preg_match ($pattern_login, $new_login)) { // Логин должен состоять только из англ. букв и цифр
$msg_new_login = 'Логин должен состоять только из английских букв и цифр';
}


Если логин Admin55_ , то ошибка не выводится. Почему шаблон "/^[A-z0-9]+$/" игнорирует нижнее подчеркивание? Я голову сломал уже!

Всем заранее спасибо.
Zzepish
вместо плюса поставь {3,} это значит, что надо чтоб по твоему орбразцу от трех до бесконечности символов было
Zzepish
я вообще так пишу '/[A-Z]{1}[0-9a-zA-Z_-<>]{2,14}/'ui
vegasmoscow
Цитата
вместо плюса поставь {3,} это значит, что надо чтоб по твоему орбразцу от трех до бесконечности символов было

А что это меняет? Длина строки здесь не причем.

Цитата
я вообще так пишу '/[A-Z]{1}[0-9a-zA-Z_-<>]{2,14}/'ui


В данном выражении нижнее подчеркивание разрешено. Сейчас попробовал, сократил немного, получилось так:

"/^[A-z0-9]+$/" - игнорирует нижнее подчеркивание и ошибки нет
"/^[A-Za-z0-9]+$/" - при наличии нижнего подчеркивания выдает ошибку (что мне и нужно)

Получается, что интервалы [A-Za-z] и [A-z] не одно и то же? Вот из-за таких нелогичных нюансов столько времени потратил. И нигде в сети об этом не написано.
Invis1ble
vegasmoscow
Цитата
Если логин Admin55_ , то ошибка не выводится. Почему шаблон "/^[A-z0-9]+$/" игнорирует нижнее подчеркивание? Я голову сломал уже!

потому что _ попадает в интервал A-z (а также "[", "\", "]", "^" и "`"). Все они расположены в интервале 65-122 ascii-кодов.
В твоем случае лучше воспользоваться /^[[:alnum:]]+$/ либо /^[a-z0-9]+$/i

_____________

Профессиональная разработка на заказ

Я на GitHub | второй профиль

vegasmoscow
Цитата
потому что _ попадает в интервал A-z (а также "[", "\", "]", "^" и "`"). Все они расположены в интервале 65-122 ascii-кодов.
В твоем случае лучше воспользоваться /^[[:alnum:]]+$/ либо /^[a-z0-9]+$/i


Спасибо за разъяснения, у меня таких познаний нет.
Написал "/^[A-Za-z0-9]+$/", заглавные буквы тоже включил на всякий пожарный, протестировал, пока все без глюков.
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2025 Invision Power Services, Inc.