GY1-9邮政编码的正则表达式


Regular Expression for GY1-9 postcodes

我正试图为我的发货部分制作一个不区分大小写的正则表达式,它可以捕获所有以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