Help us understand the problem. What is going on with this article?

【Laravel】regexを使用するときは、パターン修飾子「u」をつけた方が良いという話

そんなに長くない話です。
【Laravel】フリガナ入力のバリデーションのテストコード作成という記事を書いたのですが、記事中ではregexというバリデーションルールを使用しています。
これ、内部でpreg_match関数を使用しているみたいです。
以下、日本語ドキュメントより。

regex:正規表現
フィールドが指定された正規表現にマッチすることをバリデートします。
このルールは内部でPHPのpreg_match関数を使用しています。指定された正規表現は有効なデリミッタも含め、preg_matchで要求されているのと同じ形式に従う必要があります。たとえば、'email' => 'regex:/^.+@.+$/i'のようにです
https://readouble.com/laravel/5.8/ja/validation.html#rule-regex

なので正規表現内でひらがななどの文字を扱う際は、最後のスラッシュの後にuをつけた方が良いです。というかつけないとバリデーションが上手くいきません。。。

regex:/^[ァ-ヶー]+$/u

で、パターン修飾子uってなんぞやという話になると思うのですが、PHP Manualにこう書いてありました。

u (PCRE_UTF8)
この修正子は、Perl 非互換な PCRE の機能を有効にします。パターンと対象文字列は、 UTF-8 として処理されます。 無効な対象文字列を preg_* 関数に渡しても、何もマッチしません。 無効なパターンを渡すと、E_WARNING レベルのエラーが発生します。 5オクテットおよび6オクテットの UTF-8 シーケンスは、PHP 5.3.4 以降 (PCRE 7.3 2007-08-28 以降) では無効とみなされます。 以前のバージョンでは、これらも UTF-8 として有効だとみなされていました。
https://www.php.net/manual/ja/reference.pcre.pattern.modifiers.php

ようするに、パターンと対象文字列をUTF-8として処理してくれるみたいですね。

これに気づかず30分くらい無駄な時間を過ごしました。。。

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away