我正试图为我的发货部分制作一个不区分大小写的正则表达式,它可以捕获所有以GY1-GY9开头的邮政编码(仅限单个数字)。到目前为止,它捕获了所有gy邮政编码,而不仅仅是1-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]
在Regexr 上查看
编辑:
当第二部分只能有一个前导数字时,你可以尝试这个
^GY[1-9]'s?[1-9][a-z]{2}
在Regexr 上查看
意思是以"GY"开头,然后是1-9中的一位数字,后面是一个可选空格,然后是另一位数字和两个字母。
对于有效且格式始终为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]
都匹配大小写
var reg=/^[gG][yY][1-9]$/
GY1Gy1gY1gy1。。。。。
'/^gy'd{1}$/i'
这应该可以解决问题。$表示''d{1}应该是字符串的结尾,因此它将接受"GY1"到"gy9",但不接受"GY12"。注意,使用i
修饰符可以很容易地区分大小写。
$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