はじめに
- 正規表現ってむずかしいですよね。
- そんなあなたにおすすめなライブラリがあるのでご紹介します。
今回やること
- phpで正規表現をわかりやすく書けるライブラリ
VerbalExpressions/PHPVerbalExpressions
の紹介 - 適当にpostした値をライブラリを利用して構築した正規表現でチェックしてみる
使い方
-
VerbalExpressions/PHPVerbalExpressions
のインストール
composer require verbalexpressions/php-verbal-expressions
- コントローラだったりモデル、サービスなど使いたいところで使うだけ
使用例
- URLの形式のに沿っておるか正規表現でチェックしたい時
普通に書くとこんな感じ ↓↓↓↓↓↓ むずかしい...
$regex = 'https?://[\w!?/+\-_~;.,*&@#$%()'[\]]+';
if (preg_match($regex, $str)) {
echo '正しい!!!!!';
} else {
echo '間違ってる!!!!!';
}
ライブラリを利用すると ↓↓↓↓↓↓↓↓↓ ビミョーにわかるかも?
$regex = new PHPVerbalExpressions();
// 正規表現を構築
$regex->startOfLine() // スタート
->then('http') 「http」が続く、
->maybe('s') // 「s」があってもなくてもいい
->then('://') // 「://」が続く、
->maybe('www.') // 「www.」があってもなくてもいい
->anythingBut(' ') // 空白以外の文字
->endOfLine(); // おしまい
// 構築した正規表現を取得
$pattern = $regex->getRegex();
if (preg_match($pattern, $request->test)) {
echo '正しい!!!!!';
} else {
echo '間違ってる!!!!!';
}
このように少しだけ読みやすくなります!!!!!!
then()やmaybe()などのメソッドの他にも色々メソッドあるので使いこなせれば色々できると思います!
いくつかクイズです!
下記それぞれ2つの実装を見て、何の正規表現か当ててみてください!
No.1
- ヒント
- anything()は何でもありです
$regex = new PHPVerbalExpressions();
$regex->startOfLine()
->anything()
->then('@')
->anything()
->then('.')
->anything()
->endOfLine();
答えは ↓↓↓↓↓↓↓↓
Eメールアドレスでした!!!
No.2
- ヒント
- add()は正規表現パターンを追加するメソッドです
- 「\d」は数字と一致という意味があります
$regex = new PHPVerbalExpressions();
$regex->startOfLine()
->add('\d{3}')
->then('-')
->add('\d{4}')
->endOfLine();
答えは ↓↓↓↓↓↓↓↓
郵便番号(ハイフンあり)でした!!!
まとめ(思ったこと)
- このライブラリは簡単に正規表現か構築できていいですが、正直メールアドレスや、IPアドレスとかのバリデーションなどはlaravelのフォームリクエストに任せるのがいいかな。
- 使う場合、入力データのバリデーションや認可が主要な目的であれば、FormRequestを使って、文字列パターンの生成や検証が主要な目的であれば、PHPVerbalExpressionsと、使い分けるといいかもしれない。
- ただ、正規表現わからんマンがプロジェクトにたくさんいたり、特殊な検証で特殊な正規表現を構築する時だとコードが読みやすいなどの理由で導入してもいいのかなとか思ったり。
実はphpだけでなく色々な言語verもあるので興味ある方は見てみてください
ご視聴ありがとうございました!