2012-02-23 5 views
0

Я пытаюсь сделать нечувствительное к регистру регулярное выражение для моего раздела доставки, которое ловит все почтовые индексы, начинающиеся с GY1 - GY9 (только одиночные цифры). До сих пор он ловит все почтовые индексы, а не только 1-9. Вот что у меня есть до сих пор:Регулярное выражение для почтовых индексов GY1-9

^[gG][yY][1-9]{1} 

Любые идеи?

Edit:

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

^[gG][yY][1-9]\s?[1-9][a-zA-Z]{2}$ 
+0

Пожалуйста дайте пример почтового индекса не должны поймать, но что он ловит. Я спрашиваю, потому что ваше регулярное выражение выглядит хорошо для меня. – hakre

+0

это может быть GY1 1aa или GY15HG –

+0

За действительные или недействительные? Каков будет действительный пример, какой недопустимый? Если вы не знаете, что должно быть сопоставлено, трудно написать регулярное выражение;) – hakre

ответ

2

Попробуйте

/^GY[1-9](?!\d)/i 

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

  • Я использую отрицательное опережения утверждение (?!\d), чтобы гарантировать, что не является цифрой после [1-9].

  • Флаг i в конце делает соответствующий регулярное выражение чувствительно к регистру, поэтому нет необходимости в [gG][yY]

Смотреть это here on Regexr

Edit:

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

^GY[1-9]\s?[1-9][a-z]{2} 

Посмотреть here on Regexr

средства начинается с «GY», то цифра от 1-9, с последующим дополнительным пространством, то другой цифры и две буквы.

+0

Единственная проблема заключается в том, что вторая часть почтового индекса начинается с цифры, за которой следуют две буквы, и может иметь место после номера GY или нет, например. первым почтовым индексом является GY1 1aa, и вы также можете иметь GY15HG. –

+0

@PhilFaceplantYoung вторая часть запускается все время с одной цифрой или может быть также 2-значная цифра, например. GY1 23AA/GY123AA? – stema

+0

Это всегда одно число и две буквы, следующие за первой частью. Он все еще нуждается в/i на нем? например^GY [1-9] \ s? [1-9] [a-z] {2}/i? –

0
'/^gy\d{1}$/i' 

Это должно исправить. $ Говорит, что \ d {1} должен быть окончанием строки, поэтому он будет принимать «GY1» через «gy9», но не «GY12». Обратите внимание, что чувствительность к регистру легко выполняется с помощью модификатора i.

1

Для того, чтобы быть действительным и формат всегда GY, затем 1-9, а затем дополнительное пространство, затем 1 цифру, а затем 2 буквы. GY и последние 2 буквы должны быть нечувствительны к регистру.

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

~^gy[1-9] ?\d[a-z]{2}$~i 

Читать как:

  • ~ узор разделителем
  • ^ начало строки
  • gy (дословный)
  • [1-9] 1 ... 9
  • ? опциональный пространство
  • \d одна цифра
  • [a-z]{2} две буквы
  • $ конец строки
  • ~ шаблон Разделитель
  • i чувствительны к регистру - gy, а также [a-z] соответствуют верхнему и нижнему регистру.
0
$pattern = '/^GY[0-9]()?[0-9][A-Z]{2}?$/i'; 
$codes = array(
    'GY1 AAA', 
    'GY2 2BX', 
    'GY 545', 
    'gy5 5rt1', 
    'GY15HG', 
    'GY10 8FG' 
); 

foreach($codes as $code){ 

    echo $code, ': '; 
    if (preg_match($pattern, $code)){ 
     echo 'valid'; 
    } 
    else { echo 'invalid'; } 
    echo '<br />'; 
} 

печатает

GY1 AAA: invalid 
GY2 2BX: valid 
GY 545: invalid 
gy5 5rt1: invalid 
GY15HG: valid 
GY10 8FG: invalid 
Смежные вопросы