我尝试在我的Phalcon模型中验证Alnum。但是当我用西里尔文 (utf8( 输入符号时,我没有得到正确的验证
$validation->add(
'title',
new PhalconValidationValidatorAlnum([
"message" => 'Поле Город содержит недопустимые символы',
])
);
Phalcon的验证服务使用的是内置ctype_alnum
函数的PHP(如此处所示(,该函数不支持多字节字符串。
用于测试的快速片段:
$validation = new PhalconValidation();
$validation->add(
'name',
new PhalconValidationValidatorAlnum(
[
'message' => 'Validation failed',
]
)
);
$words = [
'test1234',
't__est1234',
'тест123',
];
echo '<h2>Phalcon Validation</h2>';
foreach ($words as $word) {
$messages = $validation->validate(['name' => $word]);
if (count($messages)) {
echo '[N] '. $word, '<br>';
} else {
echo '[Y] '. $word, '<br>';
}
}
echo '<h2>PHP `ctype_alnum`</h2>';
foreach ($words as $word) {
if (ctype_alnum($word)) {
echo '[Y] '. $word, '<br>';
} else {
echo '[N] '. $word, '<br>';
}
}
结果:
Phalcon Validation
[Y] test1234
[N] t__est1234
[N] тест123
PHP `ctype_alnum`
[Y] test1234
[N] t__est1234
[N] тест123
恐怕你必须用preg_match
来解决你的问题。快速示例:
preg_match("/^[a-zA-Zp{Cyrillic}0-9s-]+$/u", $string);
来源:将阿拉伯字符与 ctype_alnum 一起使用或如何将ctype_alpha与 UTF-8 一起使用
最后,以下是有关如何创建自己的验证器的信息: https://docs.phalconphp.com/en/latest/validation#validators
更新:从评论中@Vladimir Kompaniec解决方案!
$validator->add('city', new Callback([
'callback' => function () {
if (empty($this->subway)) {
return true;
}
return (0 != preg_match("/[wds-А-Яа-я]+/u", $this->subway));
},
'message' => 'Поле метро содержит недопустимые символы',
'cancelOnFail' => true,
]));