2010-09-29 3 views
1

Я использую следующее регулярное выражение для соответствия номеру учетной записи. Когда мы первоначально помещали это регулярное выражение вместе, правило состояло в том, что номер учетной записи начинался бы только с одной буквы. С тех пор это изменилось, и у меня есть номер счета, который имеет 3 буквы в начале строки.Regex помогает сопоставить более одной буквы

Я хотел бы иметь регулярное выражение, которое будет соответствовать как минимум 1 букве и максимум 3 буквам в начале строки. Последний вопрос - длина строки. Это может быть до 9 символов и минимум 3.

Вот что я в настоящее время использую.

'/^([A-Za-z]{1})([0-9]{7})$/'

Есть ли способ, чтобы соответствовать всем этим?

ответ

5

Вы хотите:

^[A-Za-z]([A-Za-z]{2}|[A-Za-z][0-9]|[0-9]{2})[0-9]{0,6}$ 

Начальная [A-Za-z] гарантирует, что он начинается с буквы, то второй бит ([A-Za-z]{2}|[A-Za-z][0-9]|[0-9]{2}) гарантирует, что это долго, по крайней мере трех символов и состоит из от одного до трех букв в начале, и конечный бит [0-9]{0,6} позволяет вам получить до 9 символов.

Далее объяснив:

^     Start of string/line anchor. 
[A-Za-z]    First character must be alpha. 
([A-Za-z]{2}  Second/third character are either alpha/alpha, 
|[A-Za-z][0-9]  alpha/digit, 
|[0-9]{2}   or digit/digit 
)      (also guarantees minimum length of three). 
[0-9]{0,6}   Then up to six digits (to give length of 3 thru 9). 
$     End of string/line marker. 
+0

Не совместим ли это с такими вещами, как: «A0A»? –

+0

Шелдон, оригинал сделал, вы поймали меня в середине редактирования. Этот текущий исправляет эту проблему, гарантируя, что символы 2 и 3 имеют формы 'AA',' A0' или '00'. – paxdiablo

+0

Теперь выглядит хорошо. +1 –

0

Попробуйте это:

'/^([A-Za-z]{1,3})([0-9]{0,6})$/' 

Это даст вам от 1 до 3 букв и от 3 до 9 символов всего.

+1

Это будет соответствовать «А», который слишком короткий. –

Смежные вопросы