7
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

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

Last updated at Posted at 2019-04-28

そんなに長くない話です。
【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分くらい無駄な時間を過ごしました。。。

7
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
7
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?