Я хочу проверить имена пользователей согласно этой схеме:
Это регулярное выражение удовлетворяет 1 и 2 выше, но я не могу выяснить, как удовлетворить 3:
/^[a-zA-Z\d][\w\-]+$/
(Я использую Ruby, если это релевантно),
Не очень эффективно, но просто:
/^(?!\d+$)[a-zA-Z\d][\w\-]+$/
Взгляд просто означает: "то, что следует далее, не является строкой чисел, которые продолжаются до конца".
Не идеал, но легко: используйте второй проход с регулярным выражением /^.* [A-ZA-Z _ \ -]. * $ /
Просто убедитесь, что он проходит как и все Отказ
Если вы можете пройти два прохода, то более простой и быстрый второй проход регеxp - это:
/[^\d]/
Это просто соответствует всему, что не является числом, и оно должно совпадать только с одним, и оно заканчивается раньше. Здесь не нужно быть строгим, потому что первый проход уже отвергает недопустимые символы.
Еще один способ, хотя он может не выполнять, а также максимальный:
/^[a-z0-9][-\w]*[-_a-z][-\w]*$/i
Я бы использовал регекс, который вам нужен для валидации, а затем что-то вроде:
passwd.to_i.to_s.length != passwd.length
, чтобы проверить, что passwd
не является строкой цифр после того, как он пройдет первичную валидацию.