我的数据库中有一个description
字段,它接受字母数字字符和空格,以及换行符。我想在Server
模型中设置验证规则。
这就是我现在所拥有的:
<?php
class Server extends AppModel {
public $validate = array(
// ...
'description' => array(
'characters' => array(
'rule' => 'alphaNumeric',
'message' => 'Alphanumeric characters only'
)
),
// ...
);
}
如何修改此选项以允许空格和换行符以及字母数字字符?我认为Cake会有一个内置验证规则,但我看不到一个。我需要自己编写并使用一些正则表达式吗?
感谢。
答案 0 :(得分:2)
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