3

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

这是我现在拥有的:

<?php

class Server extends AppModel {

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

}

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

谢谢。

4

3 回答 3

2

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

例子:

'description' => array(
    'characters' => array(
        'rule' => array('custom', '/^[a-z0-9 ]*$/i'),
        'message'  => 'Alphanumeric characters with spaces only'
    )
),
于 2014-09-20T06:05:29.733 回答
0

不,CakePHP 不能涵盖所有情况,而您的情况也不是那么常见。

请参阅http://api20.cakephp.org/view_source/validation#l-73它只是字符和整数。

利用

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

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

于 2012-07-04T01:40:14.157 回答
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

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

希望这会对某人有所帮助:)

编辑:但是有时它不接受一些重音的非拉丁字符,例如西里尔语 и́ 这实际上是两个字符 и 和 ́ 。́ 属于 Mark, Nonspacing Mn 的 unicode 类别(并且 Mn 不在此正则表达式模式中)。这种异常在亚洲语言(中文、韩文、印地文……)中并不罕见,因为那里充满了 Mn unicode 字符。

FD

于 2015-10-12T19:25:30.920 回答