2012-02-23 49 views
0

我想爲我的裝運部分製作一個不區分大小寫的正則表達式,它捕獲以GY1 - GY9(僅限單個數字)開頭的所有郵政編碼。到目前爲止,它捕獲所有gy郵編,而不僅僅是1-9。這是我到目前爲止:GY1-9郵政編碼的正則表達式

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

任何想法?

編輯:

我使用了基於以下STEMA的回答下面的正則表達式:

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

請給出郵編它不應該趕上的一個例子,但它抓住。我問,因爲你的正則表達式對我來說很好。 – hakre 2012-02-23 10:37:20

+0

它可能是GY1 1aa或GY15HG – 2012-02-23 10:49:10

+0

有效或無效?什麼是一個有效的例子,什麼是無效的例子?如果你不清楚應該匹配什麼,很難寫出正則表達式;) – hakre 2012-02-23 10:50:55

回答

2

試試這個

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

你的正則表達式匹配,因爲可以有任何以下的數字。

  • 我用式斷言(?!\d),以確保沒有你的[1-9]後一個數字。

  • 在結束標誌i使正則表達式匹配大小寫不敏感的,所以沒有必要[gG][yY]

查看它here on Regexr

編輯:

當第二部分可以只有1個前導數字,你可以試試這個

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

看到它here on Regexr

意味着「GY」開頭,然後從1-9的數字,後面跟着一個可選的空間,那麼另一個數字和兩個字母。

+0

唯一的問題是,郵編的第二部分以數字後跟兩個字母開始,並且可能在GY數字之後有空格,例如,第一個郵編是GY1 1aa,你也可以有GY15HG。 – 2012-02-23 10:48:36

+0

@PhilFaceplantYoung第二部分始終以一個數字開始,或者也可以有兩個數字,例如GY1 23AA/GY123AA? – stema 2012-02-23 10:57:00

+0

第一部分後面總是一個數字和兩個字母。它還需要/我嗎?例如^ GY [1-9] \ s?[1-9] [a-z] {2}/i? – 2012-02-23 11:06:19

0
var reg=/^[gG][yY][1-9]$/ 

GY1 GY1 GY1 GY1 .....

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

這應該修復它。 $表示\ d {1}應該是字符串的結尾,所以它將通過「gy9」接受「GY1」,但不接受「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 
相關問題