Проблемы с регулярным выражением php

171
22 сентября 2017, 20:42

здравствуйте, есть регулярка для проверки ника при регистрации ~^[^-_][a-zA-Z_\-0-9]*$~u но почему-то пользователь может ввести такой #ник , хэштег одобряется только если он стоит как первый символ, не подскажите как это исправить?

Answer 1

Если необходимо сделать так, чтобы первый символ был отличен от - и _, можно исправить ваш исключающий символьный класс на блок предварительного просмотра вперёд:

~^(?![-_])[a-zA-Z_0-9-]*$~u
  ^^^^^^^^

Или же воспользоваться

~^(?:[a-zA-Z0-9][\w-]*)?$~D

См. демо

Подробности

  • ^ -начало строки
  • (?:[a-zA-Z0-9][\w-]*)? - 1 или 0 последовательностей след. шаблонов:
    • [a-zA-Z0-9] - 1 ASCII-буква или цифра
    • [\w-]* - 0 и более букв/цифр/_ (\w) и/или -
  • $ - конец строки (модификатор D заставит $ найти позицию непосредственно в конце строки)
Answer 2

Пусть ник начинается только на букву, а содержит буквы, цифры и знаки "_" и "-"

~^[a-zA-Z][a-zA-Z_\-0-9]*$~u
READ ALSO
Что такое “Правило одного определения” (One definition rule)?

Что такое “Правило одного определения” (One definition rule)?

Что такое "Правило одного определения"?

301
Вылет программы C++(Segmentation fault)

Вылет программы C++(Segmentation fault)

После появления запроса на ввод чисел программа вылет с такой ошибкой: Segmentation fault (core dumped)

243
Запуск exe с флеш носителя

Запуск exe с флеш носителя

Добрый день! У меня такая проблема компилирую exe, который необходимо запустить с флеш носителя на другом PCПри запуске, АВ Avast пропускает исполняемый...

247
Заменить все символы на пробелы

Заменить все символы на пробелы

Я считываю строку, состоящую из чисел, разделенных различными символами, как удалить из строки все символы, заменив их на пробелы(хочу посчитать...

324