Регулярное выражение, которое выражает "хотя бы одну не цифру" - PullRequest
8 голосов
/ 24 января 2010

Я хочу проверить имена пользователей согласно этой схеме:

  1. Допустимые символы: буквы, цифры, дефис, подчеркивание
  2. Первый символ должен быть буквой или цифрой
  3. Имя пользователя не может быть всеми числами

Это регулярное выражение удовлетворяет 1 и 2 выше, но я не могу понять, как удовлетворить 3:

/^[a-zA-Z\d][\w\-]+$/

(я использую Ruby, если это актуально)

Ответы [ 5 ]

11 голосов
/ 24 января 2010

Не очень эффективно, но просто:

/^(?!\d+$)[a-zA-Z\d][\w\-]+$/

«Взгляд в будущее» просто означает: «то, что следует, не является строкой чисел, продолжающихся до конца».

1 голос
/ 24 января 2010

Если вы можете сделать два прохода, то более простое и быстрое регулярное выражение второго прохода:

/[^\d]/

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

1 голос
/ 24 января 2010

Не идеально, но легко: используйте второй проход с регулярным выражением /^.*[a-zA-Z_\-].*$/

Просто убедитесь, что он прошел оба, и все будет в порядке.

0 голосов
/ 24 января 2010

Еще один способ, хотя он может не работать так же хорошо, как Макс:

/^[a-z0-9][-\w]*[-_a-z][-\w]*$/i
0 голосов
/ 24 января 2010

Я бы использовал регулярное выражение, которое вам нужно для проверки, а затем что-то вроде:

passwd.to_i.to_s.length != passwd.length

для проверки того, что passwd не является строкой цифр после того, как она прошла первичную проверку.

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