CakePHP验证规则:带空格的字母数字

时间:2012-07-03 23:47:04

标签: php validation cakephp alphanumeric

我的数据库中有一个description字段,它接受字母数字字符和空格,以及换行符。我想在Server模型中设置验证规则。

这就是我现在所拥有的:

<?php

class Server extends AppModel {

    public $validate = array(
        // ...
        'description' => array(
            'characters' => array(
                'rule'     => 'alphaNumeric',
                'message'  => 'Alphanumeric characters only'
            )
        ),
        // ...
    );

}

如何修改此选项以允许空格和换行符以及字母数字字符?我认为Cake会有一个内置验证规则,但我看不到一个。我需要自己编写并使用一些正则表达式吗?

感谢。

3 个答案:

答案 0 :(得分:2)

CakePHP中的

alphaNumeric表示不带空格的字母数字字符。因此,您必须使用自己的正则表达式模式。

示例:

'description' => array(
    'characters' => array(
        'rule' => array('custom', '/^[a-z0-9 ]*$/i'),
        'message'  => 'Alphanumeric characters with spaces only'
    )
),

答案 1 :(得分:0)

不,CakePHP不能涵盖所有情况,而你的情况也不是很常见。

请参阅http://api20.cakephp.org/view_source/validation#l-73其正常的字符和整数。

使用

'rule'     => array('custom', 'your-regex-here'),

应该很容易找到符合您需要的正则表达式,或者复制和修改验证类中的正则表达式。

答案 2 :(得分:0)

如果您查看lib / cake / utility / validation.php中的alphaNumeric函数,您可以:

/^[\p{Ll}\p{Lm}\p{Lo}\p{Lt}\p{Lu}\p{Nd}]+$/Du

这匹配字母数字的unicode字母和数字,如Владимир(在俄罗斯),김정(在韩国),习近平(在中国)等...

所以我使用默认的CakePhp制作我的自定义字母数字模式,以及像O'Brian,François,Mary-Louise,Juan Martin这样的名字......

/^(?![\s'-])(?:[\s'-]{0,1}[\p{Ll}\p{Lm}\p{Lo}\p{Lt}\p{Lu}\p{Nd}])+$/Du

现在它将名称与' - 和空格匹配。但不是如果它们是连续的,在第一个或最后一个位置(因为我不认为这可能存在^^)

希望这会有所帮助:)

编辑:但有时它不接受一些带有重音的非拉丁字符,如cyrilic,实际上是两个字符和。并且处于Mark的unicode类别,非间距Mn(并且Mn不在此正则表达式模式中)。这种例外在亚洲语言(中文,韩文,印地文......)中并不罕见,因为有很多Mn unicode字符。

FD