入力チェックの不具合を追っていると、だいたい同じところに行き着きます。「正規表現、どこかからコピーしてきましたよね?」
悪気はないんです。メールアドレスの正規表現なんて、毎回書きたいものではありません。検索して、上に出てきたものを貼る。動いているように見える。レビューでも誰も読まない。そうやって、本番で foo+bar@example.co.jp が弾かれます。
「動いているように見える」がいちばん厄介です
正規表現の怖いところは、間違っていてもふつうの入力では通ってしまうことです。tanaka@example.com は何を貼っても通ります。落ちるのは、プラス記号の入ったアドレス、長いドメイン、ハイフン入りの会社名。つまり、実際に使っている人のごく一部です。
QAの目で見ると、これは典型的な「代表値だけ確認して通ったつもりになる」パターンです。テスト設計で境界値や異常系を並べるのと同じことを、正規表現にもやる必要があります。ところが、そのための場所が意外とない。エディタで確かめるには実装に組み込むしかなく、オンラインのテスターは英語圏の例ばかりで、日本の電話番号や郵便番号は自分で書くことになります。
パターン集と、その場で試す欄をひとつにしました
作ったのは正規表現テスターです。日本の入力でよく使うパターンを並べておいて、押すとテスターに入る形にしました。
- メールアドレス・電話番号(ハイフンあり/なし)・郵便番号・URL
- ひらがなだけ・カタカナだけ・半角英数字だけ
- 全角文字を見つける・前後の空白を見つける
下のテスターに文字列を入れると、マッチしたところが色で出ます。パターンとフラグはその場で書き換えられるので、「この会社のドメインだと落ちる」を確かめてから直せます。
無料・登録不要。ファイルはどこにも送りません
業務で使う道具なので、そこが気になると思います。
- 無料 … 課金も回数制限もありません
- 登録不要 … アカウントもメールアドレスも要りません
- ブラウザの中だけで動きます … 生成も判定も、その端末の上で完結します。サーバーには何も送っていません
- インストール不要 … 会社のPCに何かを入れる稟議は要りません
試すべきなのは、通る入力ではありません
使うときのコツをひとつ。通ってほしい入力を1つ入れて満足しないことです。見るべきなのは、次の3種類です。
- 通ってほしいのに落ちるもの … プラス記号つきのメール、ハイフンなしの電話番号、長いドメイン。ここが実害の出る側です
- 落ちてほしいのに通るもの … 全角の混ざった数字、前後に空白がついた入力、途中に改行が入ったもの
- 境界 … 桁数の下限と上限、そのひとつ外側
とくに前後の空白は、コピー&ペーストで日常的に混ざります。「なぜか登録できない」の問い合わせを追うと、末尾に半角スペースがひとつ付いていた、というのは何度も見ました。空白を見つけるパターンを用意してあるのは、そのためです。
正直に書くと、正規表現で完全な検証はできません
メールアドレスを厳密に判定する正規表現は、現実には使いものになりません。規格どおりに書くと、とても人が読めない長さになります。実務では「明らかにおかしいものを弾く」までに留めて、本当に届くかどうかは確認メールで確かめる、という切り分けのほうが安全です。
このツールのパターンも、その方針で書いています。厳密さより、通ってほしい人を弾かないことを優先しています。
コピーする前に、1分だけ試す
検索して出てきた正規表現をそのまま貼るのは、他人が書いたテストケースを読まずに合格印を押すのに似ています。1分で確かめられる場所があれば、たいていの事故はそこで止まります。
入力チェックまわりのテスト観点そのものはTESTパターン集に、用語の確認はQA・バグ用語辞典にまとめてあります。あわせてどうぞ。