Подтвердить что ты не робот

Regex: сопоставить только буквы С номерами

Как создать выражение регулярного выражения, которое будет соответствовать буквам с номерами?

Я пробовал что-то вроде (?>[A-z]+)([a-z0-9]+).

Регулярное выражение должно давать следующий результат:

1234b --> true
1234 --> false
abcd --> false
abcd4 --> true
4b9b3361

Ответ 1

(?:\d+[a-z]|[a-z]+\d)[a-z\d]*

В основном, где 1 и a - любое число и любая буква, он соответствует 1a или a1, окруженный любым количеством буквенно-цифровых символов.

изменить: короче и, вероятно, быстрее теперь

Ответ 2

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

[A-Za-z0-9]*([a-zA-Z]+[0-9]+|[0-9]+[a-zA-Z]+)

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

Однако возможно более простой способ сделать это. Мое кажется длинным. Может быть, нет. Кто-нибудь хочет зайти?: P

Ответ 3

^([a-Z]+[0-9]+|[0-9]+[a-Z]+)[a-Z0-9]*$

и более простая версия, вдохновленная TimPietzcker:

^([a-Z]+[0-9]|[0-9]+[a-Z])[a-Z0-9]*$

Ответ 4

Не делайте это одним регулярным выражением, если вам не нужно. Используйте два регулярных выражения, которые должны совпадать. В Perl это будет так:

if ( /[a-zA-Z]/ && /\d/ )