[CakePHP]バリデーションではまった話

CakePHP4のバリデーションではまった話

バリデーションのalphaNumericが日本語をはじかないというので
preg_matchで実装しようとしたら動作しなくて困った

最初は下記のように書いたら「The provided value is invalid」のエラーが発生

$validator
	->scalar('password')
	->add('password', 'custom', [
		'rule' => function ($value) {
			return preg_match("/^[0-9a-zA-Z]{4,16}$/", $value);
		},
		'message' => '4桁以上16桁以下の英数字で入力してください。',
	]);

色々調べてみると・・・
https://www.php.net/manual/ja/function.preg-match.php

preg_matchの戻り値
マッチした場合は1
マッチしなかった場合は0
失敗した場合はfalse

そう。マッチしない場合はfalseではない。
なので上記に書いたコードだと動作しない。

下記のように書き換えて動作確認できた!

$validator
	->add('password', 'custom', [
		'rule' => function ($value) {
			$result = preg_match("/^[0-9a-zA-Z]{4,16}$/", $value);
			if($result == 1){
				return true;
			}

			return false;
		},
		'message' => '4桁以上16桁以下の英数字で入力してください。',
	]);

戻り値をifで判定してreturnでちゃんと戻す。

これで1日悩んでました。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

CAPTCHA