Регулярное выражение Javascript для имени пользователя, содержащее буквы, цифры и один дефис

1

Я собираюсь проверить имя пользователя через JavaScript, а затем PHP.

Имя пользователя может содержать английские буквы, цифры и один дефис (-).

Имя пользователя не может быть запущено с дефиса (-).

Имя пользователя не может быть заполнено дефис (-).

Имя пользователя не может быть запущено с номерами.

Имя пользователя не может содержать более одного дефиса (-).

Имя пользователя не может быть меньше 6 и длиннее 20.

abc123 is correct.
abc-123 is correct.
ab12 is wrong: username is shorter than 6 character.
-abc123 is wrong: username is started with hyphen.
abc123- is wrong: username is finished with hyphen.
ab-12-c3 is wrong: username contains more than one hyphen.
123abc is wrong: username is started with numbers.
  • 3
    С какой проблемой вы сталкиваетесь? Что вы пробовали?
  • 2
    Не могли бы вы показать нам, что вы уже пробовали?
Теги:

2 ответа

4
Лучший ответ

Вы можете использовать

^(?!\d)(?!.*-.*-)(?!.*-$)(?!-)[a-zA-Z0-9-]{6,20}$

См. Демонстрацию

Объяснение:

  • ^ - Матч в начале
  • (?!\d) - Не совпадают, если строка начинается с цифры
  • (?!.*-.*-) - Не совпадают, если строка содержит 2 дефиса в строке
  • (?!.*-$) - Не совпадают, если строка заканчивается дефисом
  • (?!-) - Не совпадают, если строка начинается с дефиса
  • [a-zA-Z0-9-]{6,20} - соответствует [a-zA-Z0-9-]{6,20} символам из указанного диапазона
  • $ - Установить конец строки.
  • 0
    @Milad: это работает для вас? Что-то неясно?
  • 1
    Это работает, и это действительно ясно и поучительно. ценить это.
2

Вам нужно использовать регулярное выражение на основе lookahead:

/^(?=.{6,20}$)[a-z][a-z0-9]+(?:-[a-z0-9]+)?$/i

Логическим подходом с использованием JavaScript будет:

function _isvalid(str) {
   var re = /^[a-z][a-z0-9]+(?:-[a-z0-9]+)?$/i
   return ((str.length > 5) && (str.length < 21) && re.test(str))
}
  • 0
    Большое спасибо @hwnd.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню