質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.47%
JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

正規表現

正規表現とは特定の文字列によるパターンマッチングを行う際に用いられる宣言型プログラミングです。

Q&A

解決済

4回答

1556閲覧

携帯番号の正規表現について

退会済みユーザー

退会済みユーザー

総合スコア0

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

正規表現

正規表現とは特定の文字列によるパターンマッチングを行う際に用いられる宣言型プログラミングです。

0グッド

1クリップ

投稿2018/01/16 03:25

JavaScriptで携帯番号のバリデーションを作っています。

条件が、三桁、四桁、三桁の合計11桁の半角数字で、
ハイフンあり、ハイフン無しどちらも許可するという仕様なのですが
ハイフン有無どちらも許可するところがわかりません。

どうぞよろしくお願いいたします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答4

0

ベストアンサー

そういうのは大抵、ハイフンを予め取り除く処理をいれて残った文字列に
^\d{11}$をチェックするのが賢明。
極端な話し「--090---123-456-----78-」みたいなものでも
数字さえあっていれば問題ないので。
とりあえず先頭の0はチェックしたほうがよいかもしれませんが
2桁目は拡張されるので変に縛らないほうがよいかもしれません

投稿2018/01/16 03:55

yambejp

総合スコア114915

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

arasi

2018/01/16 03:57

極端な話ダメでしょ
yambejp

2018/01/16 04:09

極端な話しのやつはそのデータで登録するのではなくハイフンをとって 登録するってことですから誤解ないよう。 これはバリデートの問題ではなく一般にUIの問題です 質問では3-4-3で11桁と書いていますが3-4-4と言いたいのでしょうか? でも本来携帯の区切りは3-3-5なんです なのでハイフンの位置を思い込みで想定するのは危険なので ハイフンを取ることが肝要です またjavascriptの処理ですから、バリデートせずにハイフン自体を 強制削除させることも可能ですから、そのへんが折り合いになるでしょう。
maisumakun

2018/01/16 04:14

3-3-5で書いているのって、ほぼ見かけないのはなぜなんでしょうね。
x_x

2018/01/16 04:17

市外局番がないから? どちらにしてもわたしは区切りませんが
yambejp

2018/01/16 04:32

たとえばこちら http://www.soumu.go.jp/main_content/000124099.pdf 090の後ろの3桁ごとに会社が振り分けられているので 090-123-45678 が正しいと考えるのが賢明です。 ただ、固定電話が03-1234-5678的な区切りをする慣習があるので 引きづられているんじゃないでしょうかね
tacsheaven

2018/01/16 04:35

携帯電話の 3-3-5 の二つ目の3は、事業者ごとの割り当てを表しています。最初に開設したときの事業者)。ブロック数が多くある必要はないので3桁で済ませたわけです。 実際に携帯電話を使う場合、先頭の3は覚えやすい(当初は090固定だったし)ので、問題は残りの8桁をどう覚えやすくするかになります。そうなると 3-5 に分けるよりは 4-4 に分けたほうが(感覚的には)安定する、といったあたりでしょう。 ※固定電話の市外局番には、料金が変化するという影響があるので、市外局番で切る理由になります
yambejp

2018/01/16 04:44 編集

話を少し戻して、 自分では3-4-4が正しい前提でバリデートをいれていて 入力者が別の観点で3-3-5で入力して「エラー」と弾かれるのは UIとしてはあまりよいとはいえません。 最初に書いた極端な例はたしかにおかしく、全部で11~13文字という 条件をつければべらぼうな長さの文字列は弾けます。 ただしjavascriptのバリデート(もしくはinputのpattern)は どこまでいってもユーザーへの入力補助でしかないので 悪意のあるユーザーがUIをすっとばしてデータをおくってきたり javascriptをきっていたりすればスルーされるもので サーバー側でもバリデートないしサニタイズが必要になります。 あまり厳密なチェックは補助ではなく負荷になるので注意したいものです
guest

0

携帯電話番号であることを、ある程度確実に判定しようとすれば以下のようになります。4桁目に「0」は来ません。

/^0[7-9]0-?[1-9]\d{3}-?\d{4}$/

なお、携帯電話以外での0x0の割当状況は以下のような状態です(総務省)。

  • 010…国際電話の指定番号(携帯に割り振られることはない)
  • 020-(4以外)…IoT向け番号(音声通話、一般利用者とやり取りするSMSには使用禁止)
  • 020-4…発信者課金のポケットベル
  • 050…IP電話
  • 0800…フリーコール

投稿2018/01/16 04:13

maisumakun

総合スコア145201

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

正規表現は次のようなのでいいと思います。

\d{3}-?\d{4}-?\d{3}

追記:
とりあえず質問文に忠実に書いてみましたけど、ほかの方が言うようにまずはカンマを先に削除してしまう方法の方がベターですよね。

投稿2018/01/16 03:48

編集2018/01/16 04:26
KojiDoi

総合スコア13671

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

(3-3-5の区切りを許可するか等は別として)
ハイフンありの正規表現|ハイフン無しの正規表現
のような方向性ではダメでしょうか。

投稿2018/01/16 14:56

okrt

総合スコア366

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.47%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問