Php 复数正则表达式的行限制

Php 复数正则表达式的行限制,php,regex,validation,Php,Regex,Validation,我正在开发一组验证类,目前正在构建用于应用各种验证规则的插件。我构建了以下类来验证英国邮政编码: class PostcodeUk extends abstr\Prop implements iface\Prop { const /** * Defines the regular expression against which to test postal code * * @see http://en.wik

我正在开发一组验证类,目前正在构建用于应用各种验证规则的插件。我构建了以下类来验证英国邮政编码:

class PostcodeUk extends abstr\Prop implements iface\Prop
{
    const 

        /**
         * Defines the regular expression against which to test postal code
         * 
         * @see http://en.wikipedia.org/wiki/Postcodes_in_the_United_Kingdom#Validation UK postal code validation rules on Wikipedia 
         */
        PATTERN = '/^(GIR 0AA)|(((A[BL]|B[ABDHLNRSTX]?|C[ABFHMORTVW]|D[ADEGHLNTY]|E[HNX]?|F[KY]|G[LUY]?|H[ADGPRSUX]|I[GMPV]|JE|K[ATWY]|L[ADELNSU]?|M[EKL]?|N[EGNPRW]?|O[LX]|P[AEHLOR]|R[GHM]|S[AEGKLMNOPRSTY]?|T[ADFNQRSW]|UB|W[ADFNRSV]|YO|ZE)[1-9]?[0-9]|((E|N|NW|SE|SW|W)1|EC[1-4]|WC[12])[A-HJKMNPR-Y]|(SW|W)([2-9]|[1-9][0-9])|EC[1-9][0-9]) [0-9][ABD-HJLNP-UW-Z]{2})$/';

    /**
     *
     * @return bool True if valid
     * @throws \InvalidArgumentException 
     */
    public function isValid ()
    {
        $valid  = false;
        $data   = $this -> getData ();

        switch (gettype ($data))
        {
            case 'NULL'     :
                $valid  = true;
            break;
            case 'string'   :
                $valid  = preg_match (static::PATTERN, $data) > 0;
            break;
            default         :
                throw new \InvalidArgumentException (__CLASS__ . ': This property cannot be applied to data of type ' . gettype ($data));
            break;
        }

        return ($valid);
    }
}
PostcodeUk::PATTERN中定义的正则表达式源自中给定的。但是,给定的正则表达式检测较大文本块中包含的有效邮政编码字符串。我希望它只与有效的邮政编码完全匹配,不包括前面和后面的字符。因此(
SW1A 0AA
)应该作为有效消息传递,但(
foobarSW1A 0AA
)不应该

我在正则表达式中添加了锚(^开头,$结尾),试图强制它只接受一个只有邮政编码的字符串作为有效字符串。但是,该类仍然传递带有填充和/或非邮政编码字符串的邮政编码

我做错了什么?我认为添加锚就足以获得我想要的行为

将锚点添加为:

^(?:regex)$
^foo | bar$
^(?:foo | bar)$
不同


您还应该使用
\z
而不是
$
$
允许在字符串末尾使用可选的换行符,而
\z
是严格的字符串结尾匹配。

对不起,需要澄清一下。你的意思是
/^(?(GIR 0AA)|(诸如此类)$
?(好的,编辑让它更清晰了一点,谢谢)我也不知道\z的事情,所以谢谢你指出这一点。