法尔孔验证西里尔语 UTF8



我尝试在我的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, 
]));

最新更新