2012-02-23 121 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 
相关问题