我想为我的装运部分制作一个不区分大小写的正则表达式,它捕获以GY1 - GY9(仅限单个数字)开头的所有邮政编码。到目前为止,它捕获所有gy邮编,而不仅仅是1-9。这是我到目前为止:GY1-9邮政编码的正则表达式
^[gG][yY][1-9]{1}
任何想法?
编辑:
我使用了基于以下STEMA的回答下面的正则表达式:
^[gG][yY][1-9]\s?[1-9][a-zA-Z]{2}$
我想为我的装运部分制作一个不区分大小写的正则表达式,它捕获以GY1 - GY9(仅限单个数字)开头的所有邮政编码。到目前为止,它捕获所有gy邮编,而不仅仅是1-9。这是我到目前为止:GY1-9邮政编码的正则表达式
^[gG][yY][1-9]{1}
任何想法?
编辑:
我使用了基于以下STEMA的回答下面的正则表达式:
^[gG][yY][1-9]\s?[1-9][a-zA-Z]{2}$
试试这个
/^GY[1-9](?!\d)/i
你的正则表达式匹配,因为可以有任何以下的数字。
我用式断言(?!\d)
,以确保没有你的[1-9]
后一个数字。
在结束标志i
使正则表达式匹配大小写不敏感的,所以没有必要[gG][yY]
编辑:
当第二部分可以只有1个前导数字,你可以试试这个
^GY[1-9]\s?[1-9][a-z]{2}
意味着“GY”开头,然后从1-9的数字,后面跟着一个可选的空间,那么另一个数字和两个字母。
唯一的问题是,邮编的第二部分以数字后跟两个字母开始,并且可能在GY数字之后有空格,例如,第一个邮编是GY1 1aa,你也可以有GY15HG。 – 2012-02-23 10:48:36
@PhilFaceplantYoung第二部分始终以一个数字开始,或者也可以有两个数字,例如GY1 23AA/GY123AA? – stema 2012-02-23 10:57:00
第一部分后面总是一个数字和两个字母。它还需要/我吗?例如^ GY [1-9] \ s?[1-9] [a-z] {2}/i? – 2012-02-23 11:06:19
var reg=/^[gG][yY][1-9]$/
GY1 GY1 GY1 GY1 .....
'/^gy\d{1}$/i'
这应该修复它。 $表示\ d {1}应该是字符串的结尾,所以它将通过“gy9”接受“GY1”,但不接受“GY12”。请注意,区分大小写使用i
修饰符很容易完成。
为了有效和格式总是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]
大小写都匹配。$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
请给出邮编它不应该赶上的一个例子,但它抓住。我问,因为你的正则表达式对我来说很好。 – hakre 2012-02-23 10:37:20
它可能是GY1 1aa或GY15HG – 2012-02-23 10:49:10
有效或无效?什么是一个有效的例子,什么是无效的例子?如果你不清楚应该匹配什么,很难写出正则表达式;) – hakre 2012-02-23 10:50:55