未分類

電話番号の正規表現は?

電話番号のバリデーション(日本国内)を行う際の正規表現について。
よく見るやりこみ的な話ではなく実用レベルのものを解説していきます。

結論

結論から書くと、

ハイフン無しなら
^0[0-9]{9,10}$

ハイフン有りなら
^0[-0-9]{11,12}$

ハイフンの有無問わずなら
^0[-0-9]{9,12}$

上記で十分で、複雑なものは避ける方が無難です。
以下解説していきます。

何のための正規表現か?

おそらく、電話番号の正規表現と調べるとつらつら長い正規表現がでてくるかと思います。
しかしながら、必要なのは何に使うための正規表現でしょうか?
「電話番号って色んなパターンあるけど正規表現にしたらどうなるのかな?」であれば複雑なものになります。
しかし、おそらく大半の人は、ただ入力のバリデーションのために正規表現を使いたいのかと思います。
よくわからないけど出てきたから使う、とするともしかすると新しい電話番号は弾かれる可能性もあります。

ではバリデーションのために必要なものと不要なものは何でしょうか。

文字種:半角の数字であることや-(ハイフン)やカッコの有無
03-1234-5678なのか、0312345678なのか、もしくはちょっと特殊で03(1234)5678なのか
これは保存するデータ形式として必要なバリデーションです。
文字の種類は必ずバリデーションとして絞っておきましょう。

0から始まる
0以外から始まるものは国際番号や110などの特殊な番号になります。
03-1234-5678という番号があったとして、この番号は+81 3 1234 5678 と打つと海外からでも電話をかけることができます。
0から始まることを指定することで、自動的に国内の電話番号のみに限定することができます。

10~11桁である
電話番号は固定電話は10桁、携帯などは11桁です。(ハイフンなどの記号は除く)
ハイフンなどの記号が入る場合は2文字追加されるので12~13桁になります。
0-9の色々な数字が入る可能性があるのは、先頭の固定の0を除いてそれぞれ後ろの9~10桁、ハイフン有りなら11~12桁の部分です。

✕ 11桁の電話番号(携帯の電話番号)は090,080,070から始まる
現在の日本国内の携帯電話番号を"正確に表す"のであればこの条件は必要です。
しかし、携帯の電話番号はもともと090だったところから番号が不足し始めたために080が追加され、それでも足りず最近ではPHS用だった070を割り当て開始しています。
つまり、今後もまた新しい番号が割り当てられていく可能性があります。
そうなったときにバリデーションを書き換えていないと、新しい電話番号が割り当てられたお客さんから「登録できないんだけど!」というお問い合わせがきます。
便利にするためのはずのバリデーションで不便になっています。本末転倒です。
ちゃんと電話番号のニュースについてアンテナをはって、そうなったときにすかさずバリデーション部分のメンテナンスをする体制がととのっているならいいですが...そんなことをするコストは地味に大きいですし、おそらくそんなことはしないでしょう。
また、携帯ではないですが050から始まるIP電話の番号も11桁です。

✕ ハイフンの位置
和歌山県など3桁-3桁-4桁だったり、4桁-2桁-4桁、伊豆大島など5桁-1桁-4桁の電話番号もあります。
また、携帯電話番号は元々3桁-3桁-5桁の区切りで設定されていますが見やすくするために一般的には3桁-4桁-4桁の表記になっています。
ハイフンの位置違いで違うところに電話がかかるというようなことはありません。
見やすくするために区切っているだけと割り切り、位置の正確さにはこだわらなくてよいでしょう。

番外編 0120を弾きたい
このような場合は、正規表現より前に別で弾くことをおすすめします。
無理に1つにしてもメリットは特になく、むしろ正規表現が複雑になってメンテナンスがしにくくなるためです。

簡単な正規表現は何か不安が

「めちゃくちゃ複雑な正規表現がいっぱい出てくるのに本当に簡単な正規表現でいいの?何か不安...」
という人もいるかと思います。
そんな方は何のための正規表現なのかを一度考えてみましょう。

アルファベットやひらがなが入っているなど形式が違うのはもちろん困ります。
市外局番からいれてほしいのに市外局番がないのも困ります。

でもどれだけがんばっても、正規表現で打ち間違いを全てなくせるわけではありません。
なぜなら一箇所数字を間違って、存在する別の人の電話番号を入力されてしまうという可能性があるからです。
これを防ぐのは正規表現ではなくSMS認証です。正規表現をどれだけがんばってもSMS認証の実装をサボれるわけではありません。

正規表現はあくまでおまけ、明らかに不正な形式を弾いたり一部のケースでユーザビリティを向上させる程度のものです。
複雑でメンテできない正規表現で登録できる人をはじいてしまう方がデメリットです。
ちゃんと目的を認識して必要なことを見極め、適した手段をとれるようになりましょう。

-未分類
-,

Copyright© F27P , 2021 All Rights Reserved Powered by AFFINGER5.