регулярное выражение для проверки строки содержит только буквы и цифры, но не только цифры - PullRequest
6 голосов
/ 29 июля 2010

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

Действительный

* letters
* 1wret
* 0123chars
* chars0123
* cha2rs

Неверный

* 1324
* xcvxxc%$#
* xcv123xxc%$#
* _012chars
* _test

Ответы [ 10 ]

33 голосов
/ 29 июля 2010

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

  • ^ и $ - начало и конец якоря строки соответственно
  • \d соответствует цифре
  • [a-zA-Z] соответствует букве
  • [a-zA-Z\d] соответствует букве или цифре
  • * - это повторение «ноль или больше»

Теперь мы можем составить необходимое нам регулярное выражение ( смотри на rubular.com ):

^\d*[a-zA-Z][a-zA-Z\d]*$

Вот объяснение схемы:

from the beginning...  till the end
|                      |
^\d*[a-zA-Z][a-zA-Z\d]*$
 \_/\______/\_________/

3 части:

  • Может быть несколько цифр в качестве префикса ...
  • Но тогда определенно буква!
  • А потом возможно несколько цифр и букв в виде суффикса

Ссылки

6 голосов
/ 29 июля 2010

Это должно сделать это:

^[0-9]*[a-zA-Z]+[a-zA-Z0-9]*$

Для этого требуется хотя бы один символ [a-zA-Z].

2 голосов
/ 29 июля 2010

Вместо использования регулярного выражения вы также можете использовать функции ctype_*():

var_dump(ctype_alnum('letters') && !ctype_digit('letters'));     // bool(true)
var_dump(ctype_alnum('0123chars') && !ctype_digit('0123chars')); // bool(true)
var_dump(ctype_alnum('1324') && !ctype_digit('1324'));           // bool(false)
var_dump(ctype_alnum('xcvxxc%$#') && !ctype_digit('xcvxxc%$#')); // bool(false)

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

var_dump(preg_match('/^[a-z0-9]*[a-z]+[a-z0-9]*$/i', $input));
2 голосов
/ 29 июля 2010
[a-z0-9]*[a-z]+[a-z0-9]*
1 голос
/ 29 июля 2010

Лично (я ненавижу регулярные выражения и нахожу их, как правило, трудно поддерживать), я бы сделал это в два этапа.

  1. Это все буквенно-цифровые?
  2. Есть хотя бы одна буква?
1 голос
/ 29 июля 2010

^(?=.*[a-z])[a-zA-Z0-9]+$

  • (?=.*[a-z]) положительный прогноз, чтобы убедиться, что в строке есть хотя бы одна буква (но не использует никаких символов - отбрасывает совпадающие символы, как только она возвращается (в этом случае, как только она находит письмо)).
  • [a-zA-Z0-9]+ убедитесь, что строка содержит только буквенно-цифровые символы.
  • ^ и $ - начало и конец разделителей строк.
1 голос
/ 29 июля 2010
^([a-zA-Z0-9]*)([a-zA-Z]+)([a-zA-Z0-9]*)$
0 голосов
/ 29 июля 2010
^[0-9]*[a-zA-Z]+[0-9a-zA-Z]*$

переведено: с начала, совпадать с 0 или более цифрами, затем совпадать хотя бы с одной буквой, затем совпадать с нулем или более буквами или цифрами до конца.

0 голосов
/ 29 июля 2010

это должно работать ^([a-zA-Z0-9]*)([a-zA-Z]+)([a-zA-Z0-9]*)$ EDIT Sry получил * и + испортили

0 голосов
/ 29 июля 2010
([0-9]*[a-zA-Z]+)+
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...