2013-04-18 2 views
-3

Мне нужно регулярное выражение в PHP для проверки строки типа «AB345678» или «12345678». То есть, восьмая (8) буква, содержащая первые 2 буквы в виде алфавитных или числовых, но не комбинация обоих, а затем остальные 6 букв числовые. Я пытался сделать это самостоятельно, но он не работает.Регулярное выражение Первые 2 символа либо в алфавитном, либо в цифровом, но не в сочетании как

Вот мой код:

/^[0-9a-zA-Z]{2}[0-9]{6}$/ 

Я новичок в Regex, следовательно, нужна помощь здесь.

Заранее спасибо.

ответ

2

Использование | (так называемый оператор Чередование или оператор трубы), чтобы сказать 'либо левая или правая рука':

/^([0-9]{2}|[a-zA-Z]{2})[0-9]{6}$/

+0

Hi Patashu, Благодарим за быстрый ответ. Ваше решение работало как шарм. :) –

+0

Я бы предложил использовать группу, не связанную с захватом, так как вам не нужно выводить группу захвата. '(: [0-9] {2} | [A-Za-Z] {2}?)'. –

4

Вы можете сделать это

^([a-zA-Z]{2}|\d{2})\d{6}$ 
+0

Это не удовлетворяет желанию OP. Он хочет только последние шесть символов. – Patashu

+1

Для этого вам не нужен lookbehind, ему не нужен префикс, исключенный из матча. – Barmar

+0

@all отредактировал ans .. – Anirudha

0
/^ \d{8} | (?: [a-zA-Z]{2} \d{6}) $ /x 
+1

Отформатируйте свой код! Пожалуйста, расширьте свой ответ, только ответы на код не идеальны. –

0

Для того, чтобы быть совместимым с Юникодом:

^(?:\pL{2}|\pN{2})\pN{6}$ 

с PHP:

if (preg_match('/^(?:\pL{2}|\pN{2})\pN{6}$/u', $string)) { 
    echo "OK"; 
} 
  • \pL стенды для любого письма.
  • \pN означает любое количество.
+0

number =/= digit – hakre

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