o-g-r
@o-g-r (yamada hanako)

Are you sure you want to delete the question?

Leaving a resolved question undeleted may help others!

php laravel 正規表現

解決したいこと

formValidationに入れることはできたのですが、
カスタムバリデーションにて正規表現を追加したいのですがうまくいきません。

バリデーションでチェックしたいことは、絵文字😢が入っている場合はエラーメッセージを表示したいです。

例)
まずformValidationに入れたさいのチェック

'hoge' => 'required|not_regex:/[\xF0-\xF7][\x80-\xBF][\x80-\xBF][\x80-\xBF]/',

例)
カスタムバリデーションにてチェック入れた場合

<?php

namespace App\Rules;

use Illuminate\Contracts\Validation\Rule;

class EmojiValidation implements Rule
{
    /**
     * Create a new rule instance.
     *
     * @return void
     */
    public function __construct()
    {
        //
    }

    /**
     * Determine if the validation rule passes.
     *
     * @param  string  $attribute
     * @param  mixed  $value
     * @return bool
     */
    public function passes($attribute, $value)
    {
        return preg_match('/[\xF0-\xF7][\x80-\xBF][\x80-\xBF][\x80-\xBF]/', $value);
    }

    /**
     * Get the validation error message.
     *
     * @return string
     */
    public function message()
    {
        return 'The validation error message.';
    }
}

自分で試したこと

カスタムバリデーションだと絵文字でなかったらひっかかるようになっているのかと思い、
return preg_match('/[xF0-xF7][x80-xBF][x80-xBF][x80-xBF]/', $value);

このよう修正してみました。絵文字がひとつの場合『😢』は弾いてもらえるのですが、そこに文字が入ると『😢ああああ』弾かれません。

どなたかわかる方ご教授願いします。

0

2Answer

実際にpreg_match試しましたが「😢」「😢ああああ」と入れてみましたがちゃんとマッチしてましたね。
ちなみにphpのバージョンは8です。

カスタムバリデーションの場合
一旦returnがboolみたいなので、preg_matchの値をboolに変換してからreturnしてみたらどうなりますか?
preg_matchの返り値は
https://www.php.net/manual/ja/function.preg-match.php#refsect1-function.preg-match-returnvalues
に記載されてます。

1Like

ありがとうございます。

私はphpのバージョンは7.4.28です。

うまくうごかなかったので下記のように修正したらうまくいきました。
ヒントを頂き作業進めておりました。ありがとうございました。

    if (preg_match('/[\xF0-\xF7][\x80-\xBF][\x80-\xBF][\x80-\xBF]/', $value)) {
        return false;
    } else {
        return true;
    }

1Like

Your answer might help someone💌