Форум программистов, компьютерный форум, киберфорум
PHP: RegExp
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.81/26: Рейтинг темы: голосов - 26, средняя оценка - 4.81
 Аватар для mack_91
121 / 66 / 9
Регистрация: 15.08.2012
Сообщений: 266

Запретить все логины, где присутствует слово admin

15.03.2013, 11:34. Показов 5464. Ответов 23

Студворк — интернет-сервис помощи студентам
Привет всем. Помогите плиз составить регулярку для логина. Нужно чтобы она запрещала все логины, где присутствует слово admin, ADMIN, adMin и т.д. первым символом должна быть обязательно буква, в логине не более 20 символов. Вот, что сейчас есть без фильтра (Yii):

PHP
1
array('login', 'match', 'pattern' => '#^[a-zA-Z][a-zA-Z0-9_\-]{1,20}+$#', 'message' => 'Логин содержит запрещённые символы'),
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
15.03.2013, 11:34
Ответы с готовыми решениями:

Запретить одинаковые логины на сайте
Народ проблема такая: допустим есть логин admin, то логин ADMIN уже будет считаться другим логином. Как мне сделать так чтобы регистр не...

Удалить все строки, где заданное значение присутствует
Ситуация: в листбоксе выделяем значение, это значение соответствует одинаковым значениям в столбце (в столбце много значений, но нужно...

Вывести в консоль все файлы в папке, в названии которых присутствует ключевое слово
Доброго времени суток всем, нужно реализовать следующее: приложение, которое будет выводить в консоль все файлы в папке, в названии которых...

23
 Аватар для Василий Макогон
270 / 226 / 11
Регистрация: 20.04.2012
Сообщений: 817
17.03.2013, 01:13
Студворк — интернет-сервис помощи студентам
запрещать логины - глупость несусветная.
должны быть в системе административные группы.
к любому пользователю привязывается та или иная группа.
и хоть пользователь трижды админ - он все равно будет только из той группы, к которой прикреплен.
0
 Аватар для mack_91
121 / 66 / 9
Регистрация: 15.08.2012
Сообщений: 266
17.03.2013, 01:27  [ТС]
Цитата Сообщение от Василий Макогон Посмотреть сообщение
запрещать логины - глупость несусветная.
должны быть в системе административные группы.
к любому пользователю привязывается та или иная группа.
и хоть пользователь трижды админ - он все равно будет только из той группы, к которой прикреплен.
Ну это и так понятно. Но всегда находятся "проказники", которые регают ники, похожие на админовские и от имени администраторов просят у других пользователей логин и пароль. Понятное дело, что фильтрацией ников всей ситуации не исправишь, но можно сделать хоть не большой шаг в эту сторону.
0
 Аватар для Vovan-VE
13210 / 6601 / 1041
Регистрация: 10.01.2008
Сообщений: 15,069
17.03.2013, 09:24
Цитата Сообщение от Vovan-VE Посмотреть сообщение
Code
1
/^(?=[a-z][-_a-z0-9]{1,20}$)(?:[^a]++|a(?!dmin))+$/iD
Цитата Сообщение от NEbO Посмотреть сообщение
вторую часть можно чуть улучшить (ну экспоненциальная сейчас)
Поясните. Там вроде две взаимноисключающие ветви. Разве что последний квантификатор + также сделать захватывающим ++.
Цитата Сообщение от NEbO Посмотреть сообщение
правильно ли я понимаю, что первое утверждение -- это по сути как вторая регулярка. а вместе они обе применяются к тексту и в одном выражении получается как бы два, то есть там вообще любая регулярка может быть, и справа и слева?
Да, как-то так. Обе части проверяют строку разными критериями. Уместить всё в одну проверку с одним проходом - сложнее придумать, имхо, и потом самому же будет труднее понять.

Цитата Сообщение от NEbO Посмотреть сообщение
если так, то возможно ли применить два и более утверждений подряд?
Сколько угодно раз. Можно, например, добиться комбинации, которая будет всегда ложной:
Code
1
/(?=x)(?!x)/
Однако, имхо, нет смысла делить на отдельные похожие утверждения то, что можно сделать с помощью альтернативы:
Code
1
2
/(?!foo)(?!bar)/
/(?!foo|bar)/     # то же самое
1
601 / 468 / 73
Регистрация: 22.01.2009
Сообщений: 1,180
Записей в блоге: 1
17.03.2013, 16:47
Цитата Сообщение от Vovan-VE Посмотреть сообщение
Поясните.
для начала скажу, что я был неправ и извиняюсь за безграмотность. помнится, читал когда-то про квантификатор "++", но успешно о нем забыл, т.к. ни разу не встречал его на практике (в подобных случаях пользовался атомарными группировками). Сейчас погуглил, и вспомнил, что такое сверхжадные квантификаторы. Все как бы должно быть верно, т.к. захватывается строка с символами [^a] без возвратов...
В моих локальных настройках, в php.ini прописан очень большой backtrace_limit. т.е. если что-то не так, то вылетает php, вместо того, чтобы показывать неверный результат. Тестирую строку
Code
1
str_repeat('a', 20000) . 'dmin'
на регулярке
Code
1
(?:[^a]++|a(?!dmin))+
(с опциями iD, пробовал также S (PCRE_STUDY), не помогло). Вылетает. Такие варианты срабатывают нормально:
Code
1
2
3
(?:[^a]++|a(?!dmin))++
(?:[^a]|a(?!dmin))+
(?>[^a]++|a(?!dmin))+
попробовал без альтернативы, оставив только часть с "a(?!dmin)" (все равно [^a] в такой строке, если бы и совпало, то только уже в самом конце, после проверки на a(?!admin) ). Все прошло нормально, т.е., видимо, дело в альтернативе. Дальнейшие рассуждения привели меня к попытке "раскрутить" первое выражение через:
Code
1
(?:[^a][^a]*+|a(?!dmin))+
И, что самое удивительное, сработало! Тестировалось все в спешке, сейчас срочно нужно заняться другими делами. Так что, возможно, я где-то неправ, но боюсь, что pcre "не видит" взаимоисключающей альтернативы, если выражение начинается с квантификатора (даже если это +). Вообще говоря, пожалуй, такое поведение оправдано, ибо 99% логики работы регулярок, основанных на НКА, лежит на программисте и не стоит полагаться на внутренние оптимизации -- они не всегда и не везде работают, даже вот такие, казалось бы, простые.

Не по теме:

вроде

Code
1
(?:[^a]+|a(?!dmin))++
отрабатывает нормально. поэтому, также, возникло еще одно предположение: pcre не "раскручивает" только сверхжадные квантификаторы, но за "чистоту" этого утверждения я не ручаюсь в квадрате:)

Если я где-то не прав, можете поправить. В любом случае, я для себя этот момент учел, и наверняка еще столкнусь с этим, так что буду проверять, когда будет время.
И, разумеется, еще раз спасибо за чудесную идею по объединению регулярок в одну Порой это просто расширяет кругозор, и хоть само по себе, пожалуй, не так уж часто и нужно
Кликните здесь для просмотра всего текста
Применительно к данной задаче: если бы не ограничение на 20 символов, и не ограничениям на символы, вариант с подсчетом длины строки отдельно работал бы быстрее (длина строки непосредственно хранится в zval, судя по его формату). Бенчмарк провести несложно, и я этим еще тоже займусь, очень уж интересно, как "правильно" считать длину строки в пхп. Но хотя бы из-за того же ограничения на длину, вероятно, проще будет дважды пройти по строке (длиной не более 20ти символов!!!) в "чистом" си коде, т.е. внутри pcre-автомата, чем вызывать еще одну пхп-функцию, ибо в php, как известно, достаточно большой оверхед на вызовы функций
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
17.03.2013, 16:47

Дан текстовый файл. Напечатать все его строки, в которых присутствует слово "кот"
Дано текстовый файл.Напечатать все его рядки, в которых присутствует слово "кот" Мужики помогите за полчаса сделать! Годовая...

Определить, присутствует ли в начале файла слово ‘Unit’. Слово не зависит от регистра букв
- Ввести с клавиатуры произвольное имя текстового файла. - Найти на жестком диске компьютера все файлы с заданным именем (одноименные...

Определить, присутствует ли в начале файла слово ‘Unit’. Слово не зависит от регистра букв
- Ввести с клавиатуры произвольное имя текстового файла. - Найти на жестком диске компьютера все файлы с заданным именем (одноименные...

Вывести все логины
Здравствуйте! Я хочу вывести на одной странице users.php все имена пользователей и число баллов которые они имеют. Выводиться только первый...

Проверить, присутствует ли слово в Memo
Здравствуйте, не могу найти пример как проверять из edit слова в столбце находящиеся в memo чтобы добавить его в другой memo т.е. если в...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
24
Ответ Создать тему
Новые блоги и статьи
Установка нескольких штампов электронной подписи в строго определенных местах файла docx
ВладимирСамохин 19.07.2026
(В!) Работа с Электронной подписью - это неотъемлемая часть современного документооборота. Но что делать, если нужно поставить несколько штампов электронной подписи в строго определенных местах. . .
сукцессия 35. Научная статья о проделанной работе
anaschu 19.07.2026
Написал в формате латекс и пдф
Вангую, что это не пройдёт модерацию, и на неделе я запущу свой сервер.
Hrethgir 19.07.2026
Эта публикация сейчас в песочнице и ждёт приглашения. https:/ / habr. com/ ru/ sandbox/ 295048/ начало и оглавление - Как «пернатого» заставить осваивать новые горизонты опыта через масштабирование. . .
сукцессия 33. открытые вопросы от клауде
anaschu 19.07.2026
"Что накопилось за эту часть А — тринадцать правок, из которых шесть пришли из ваших вопросов и каждая оказалась реальной ошибкой, а не калибровкой: односторонний симбиоз, отсутствующий листопад,. . .
32 сукцессия
anaschu 19.07.2026
сукцессия 28‑мерное ядро стабилизировано Коллеги, фиксирую разбор инженерных правок и их изоморфную проекцию на экономику, меметику и половой отбор. Модель теперь не «подкручивает» сходимость —. . .
сукцессия 31: модель микоризы - это модель ещё нескольких явлений, социальных и экономических
anaschu 18.07.2026
Теория «Всего»: апдейт v1. 1. 2 — 28‑мерное ядро стабилизировано Коллеги, фиксирую разбор инженерных правок и их изоморфную проекцию на экономику, меметику и половой отбор. Модель теперь не. . .
сукцессия 30. Массив проверяющих друг друга моделей
anaschu 18.07.2026
Архитектура сети взаимопроверяющих моделей микоризной сукцессии (v2. 0) Развитие тензорного ОДУ-ядра и создание кросс-платформенного калибровочного полигона Уважаемые коллеги! В продолжение. . .
Грибы - это женщины, деревья - это мужчины. Анти инь янь для союза мужчины и женщины.
anaschu 18.07.2026
ГЛАВНЫЙ НАУЧНО-ФИЛОСОФСКИЙ ВЫВОД: Сексуально-Репродуктивный Капитализм против Государства Моногамии Коллеги, мы вышли на финишную прямую 20-мерного ОДУ-моделирования вековой сукцессии (ветка. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru