【问题标题】:Regular Expression for GY1-9 postcodesGY1-9 邮政编码的正则表达式
【发布时间】:2012-03-13 18:08:34
【问题描述】:

我正在尝试为我的运输部分创建一个不区分大小写的正则表达式,以捕获所有以 GY1 - GY9 开头的邮政编码(仅限单个数字)。到目前为止,它捕获了所有 gy 邮政编码,而不仅仅是 1-9。这是我目前所拥有的:

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

有什么想法吗?

编辑:

我根据以下 stema 的回答使用了以下正则表达式:

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

【问题讨论】:

  • 请举例说明它不应该捕捉但它捕捉到的邮政编码。我问是因为你的正则表达式对我来说看起来不错。
  • 可能是 GY1 1aa 或 GY15HG
  • 有效还是无效?什么是有效的例子,什么是无效的?如果您不清楚应该匹配什么,那么很难编写正则表达式;)
  • 有效且格式始终为 GY,然后是 1-9,然后是可选空格,然后是 1 位数字,然后是 2 个字母。 GY 和最后 2 个字母需要不区分大小写。

标签: php regex drupal drupal-7 ubercart


【解决方案1】:

试试这个

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

您的正则表达式匹配,因为您的数字后面可以有任何内容。

  • 我使用负前瞻断言(?!\d) 来确保您的[1-9] 后面没有数字。

  • 末尾的标志i 使正则表达式匹配不区分大小写,因此不需要[gG][yY]

here on Regexr

编辑:

当第二部分只能有一个前导数字时,你可以试试这个

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

here on Regexr

表示以“GY”开头,然后是一个 1-9 的数字,然后是一个可选的空格,然后是另一个数字和两个字母。

【讨论】:

  • 唯一的问题是邮政编码的第二部分以一个数字开头,后跟两个字母,并且在 GY 号码后面可能有空格,例如第一个邮政编码是 GY1 1aa,你也可以有 GY15HG。
  • @PhilFaceplantYoung 第二部分一直以一位数字开头,或者也可以有两位数字,例如GY1 23AA/GY123AA?
  • 第一部分后面总是一个数字和两个字母。它还需要 /i 吗?例如^GY[1-9]\s?[1-9][a-z]{2}/i ?
  • @PhilFaceplantYoung 那么我最后的编辑就是你想要的。如果字符串在此之后结束,您可以添加 $ 以匹配字符串的结尾,如果没有,则添加 \b 以匹配单词边界。这是为了确保后面没有更多的单词字符。
  • 字符串确实结束了,但是如何使整个字符串不区分大小写的最佳方法是什么?是^[gG][yY][1-9]\s?[1-9][a-zA-Z]{2}$吗?
【解决方案2】:

为了有效且格式始终为 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] 都匹配大小写。

【讨论】:

    【解决方案3】:
    var reg=/^[gG][yY][1-9]$/
    

    GY1 Gy1 gY1 gy1 .....

    【讨论】:

      【解决方案4】:
       '/^gy\d{1}$/i'
      

      这应该可以解决它。 $ 表示 \d{1} 应该是字符串的结尾,因此它将接受“GY1”到“gy9”,但不接受“GY12”。请注意,使用 i 修饰符可以轻松区分大小写。

      【讨论】:

        【解决方案5】:
        $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
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2012-03-13
          • 1970-01-01
          • 1970-01-01
          • 2013-07-27
          • 1970-01-01
          • 1970-01-01
          • 2010-09-27
          相关资源
          最近更新 更多