regex для проверки строки содержит только букву и числа, но не только числа

Я нуждаюсь в помощи с regex, который проверяет, что строка содержит только букву и числа, но не только числа

Допустимый

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

Недопустимый

* 1324
* xcvxxc%$#
* xcv123xxc%$#
* _012chars
* _test
6
задан ondrobaco 29 July 2010 в 10:19
поделиться

10 ответов

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

  • ^ и $ - начало и конец строки соответственно
  • \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]*$
 \_/\______/\_________/

Три части:

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

Ссылки

33
ответ дан 8 December 2019 в 02:12
поделиться
^([a-zA-Z0-9]*)([a-zA-Z]+)([a-zA-Z0-9]*)$
1
ответ дан 8 December 2019 в 02:12
поделиться

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

  1. Это все буквенно-цифровые символы?
  2. Есть ли хотя бы одна буква?
1
ответ дан 8 December 2019 в 02:12
поделиться

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

-2
ответ дан 8 December 2019 в 02:12
поделиться

Это должно сработать:

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

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

6
ответ дан 8 December 2019 в 02:12
поделиться
[a-z0-9]*[a-z]+[a-z0-9]*
2
ответ дан 8 December 2019 в 02:12
поделиться

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

  • (?=.*[a-z]) положительное опережение, чтобы убедиться, что в строке есть хотя бы одна буква (но не потребляет символов - отдает совпавшие символы, как только возвращается (в данном случае, как только находит букву)).
  • [a-zA-Z0-9]+ убедитесь, что строка содержит только буквенно-цифровые символы.
  • ^ и $ являются разделителями начала и конца строки.
1
ответ дан 8 December 2019 в 02:12
поделиться

Вместо использования регулярного выражения вы также можете использовать функции 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
ответ дан 8 December 2019 в 02:12
поделиться
^[0-9]*[a-zA-Z]+[0-9a-zA-Z]*$

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

0
ответ дан 8 December 2019 в 02:12
поделиться
([0-9]*[a-zA-Z]+)+
0
ответ дан 8 December 2019 в 02:12
поделиться
Другие вопросы по тегам:

Похожие вопросы: