Phalconの検証サービスは、マルチバイト文字列をサポートしていませんctype_alnum
機能(as seen here)、内蔵のPHPを使用しているキリル文字(UTF8)で記号を入力するときしかし、私は、正しい検証をしませ得ます。テストのための
クイック抜粋:
$validation = new \Phalcon\Validation();
$validation->add(
'name',
new \Phalcon\Validation\Validator\Alnum(
[
'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-Z\p{Cyrillic}0-9\s\-]+$/u", $string);
出典:Using Arabic characters with ctype_alnumまたはHow to use ctype_alpha with 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("/[\w\d\s\-А-Яа-я]+/u", $this->subway));
},
'message' => 'Поле метро содержит недопустимые символы',
'cancelOnFail' => true,
]));
多くの徹底的な答えてくれてありがとう、あなたはあなたの問題を解決しましたか:)助けるために喜ん –
リンク?私のモデルのメソッドの検証で –
iは、コールバック関数をバリデータに追加: を$ validator->( '都市'、 新しいコールバック([ 'コールバック' =>関数(){ 場合(空(の$ this - >を追加地下鉄)) {戻り真; }! リターン(0 =するpreg_match( "/ [\ W \ D \ S \-А-Яа-я] +/U" の$ this - >地下鉄))。 }、 'message' => 'Полеметросодержитнедопустимыесимволы'、 'cancelOnFail' => true、])); –