• ベストアンサー

ハイフン省略可能な電話番号の正規表現

ハイフンを省略できる電話番号の正規表現をJavaScriptで書いているのですが、思うようにマッチしません。 検索すると以下のような正規表現がヒットしました /^0\d{1,4}-\d{1,4}-\d{4}$/ 上記の正規表現のハイフンの後ろに「?」をつけて、ハイフンが省略されてもヒットするように /^0\d{1,4}-?\d{1,4}-?\d{4}$/ しましたが、思い通りにヒットしません。 例えば、090-1234もヒットしてしまいます。 どうしたらハイフンを省略可能な電話番号の正規表現を書くことができますか?教えてください!

質問者が選んだベストアンサー

  • ベストアンサー
  • notnot
  • ベストアンサー率47% (4848/10261)
回答No.2

>が080-1234などにもヒットしてしまうのかを教えていただけると嬉しいです 08-0-1234 の最初のハイフンを省略したものと解釈されてます。

newtgecko
質問者

お礼

ご回答ありがとうございます なるほどです!ありがとうございます

newtgecko
質問者

補足

最終的に以下のように「|」で区切り、「ハイフンあり|数字だけ」の正規表現を作りました /^0\d{1,4}-\d{1,4}-\d{4}$|^0\d{9,10}$/

その他の回答 (1)

  • miasansan
  • ベストアンサー率29% (29/99)
回答No.1

JavaScriptでの、ハイフンを省略できる電話番号の正規表現をお探しなのですね? こちらのページの後半で、電話番号の例が載っています。 https://developer.mozilla.org/ja/docs/Web/JavaScript/Guide/Regular_Expressions

newtgecko
質問者

お礼

ご回答ありがとうございます > ハイフンを省略できる電話番号の正規表現をお探しなのですね? おっしゃるとおりです。ですが、よろしければ、 /^0\d{1,4}-?\d{1,4}-?\d{4}$/ が080-1234などにもヒットしてしまうのかを教えていただけると嬉しいです

関連するQ&A

  • 電話番号の正規表現について

    電話番号の正規表現について 電話番号が正しいかチェックしたいと思い、ネットで調べた上で $tel = "03-1111-1111"; $regtel = '/^0[0-9]{1,4}-[0-9]{1,4}-[0-9]{4}$/'; if( ! preg_match( $regtel, $tel ) ) { ※ } 上記のように組んでみたのですが、※のところにきてしまいます。 何か間違っているような気がするのですがわかりません。 何がおかしいのでしょうか?

    • ベストアンサー
    • PHP
  • 電話番号のハイフンをとる

    電話番号のハイフンをとるた検索、置換をかけた後、頭の0が消えてしまうのですが 0を残すためにはどうすればよいでしょうか?

  • 正規表現で分からないことがあります。

    正規表現で数字の間に「,」が入る場合と入らない場合があるのですが、どう書けばいいのでしょうか? 例えば、 1 1,2 0,1 122 等様々なパターンがある時、これらをヒットさせるにはどうすればいいのでしょうか? \d+だけだと、コンマのところでバラバラになってしまいます。 一回で全てをマッチさせる方法はありますか? 使用しているのはPHPです、よろしくお願いします。

    • ベストアンサー
    • PHP
  • エクセルで電話番号にハイフンを入れるには?

    はじめまして、表題の通りですが、なかなか難しくてうまく解決できませんので、ここで質問させていただきます。 電話番号に半角のハイフン(-)を入れて見やすくしたいと考えています。 電話番号には090などで始まる携帯の番号、大阪のように06で始まる番号、京都のように075で始まる番号、西宮市のように0798で始まる番号といろいろ入力されています。それぞれの市外局番の後にハイフンを入れて、残りの番号が8桁なら4桁+ハイフン+4桁、7桁なら3桁+4桁、6桁なら2桁+ハイフン+4桁のようにハイフンを入れていくにはどうしたらよいでしょうか? (例) 09012345678→090-1234-5678 0612345678→06-1234-5678 0751234567→075-123-4567 0798123456→0798-12-3456

  • 正規表現で特定の単語を除外したい

    javaという単語で検索するときjavascriptのjavaがマッチしてしまうのが煩わしいです。 正規表現で、javascriptという単語を含まず javaを含む行をマッチさせたい場合パターンはどのように書くものでしょうか?

    • ベストアンサー
    • Java
  • 正規表現置換で

    正規表現をかじりはじめたんですが… 〒000-0000 東京都○○○○ 電話~ を 〒000-0000★東京都○○○○ 電話~ このような置換はできるソフト、 もしくは正規表現記述方法はありますでしょうか? ちなみに正規表現というからには、当然 ・郵便番号はそれぞれべつ ・住所も東京都から始まるとは限らない マッチして欲しいのは、郵便番号と住所の間にある「 」(スペース)だけなのです。 よろしくお願いします。

  • 正規表現について教えてください。

    正規表現について教えてください。 JavaScriptでプログラミングを行っています。 その中で文字列に対しゼロサプレスを行いたいと思い 調べた結果、正規表現を使用する以下のコードで 実現可能なことが分かりました。 val.replace(/^0+([0-9]+.*)/, "$1") コードを記述し実行すると確かに可能なのですが 正規表現を調べてみても何故これでゼロサプレスが可能なのか よく理解できませんでした。 申し訳ありませんが初心者でも理解できるように説明して頂けないでしょうか。 宜しくお願いします。

  • 正規表現について

    正規表現について質問が有ります。 プログラミング初心者なので、根本的な間違い等も犯している可能性もありますがご了承下さい。 今、javascriptを使ってフォームに入力されたメールアドレスの入力チェックを行おうとしています。 とりあえずはwebを漁って見つけたソースでチェックできる様にはなったのですが、もうちょっと拡張したいと思った所、つまずいてしまいました。 元のソースは if (!this.value.match(/^[\x01-\x7F]+@((([-a-z0-9]+\.)*[a-z]+)|(\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}))$/){ alert("error"); } という風にチェックをしており、 ******(@マークが無い) ***@(@の後半が無い) @***(@の前半が無い) などの基本的な形式に対してはチェックを行う様になっています。 しかし、hoge@hogeの様に書くと、適当に書いたドメインでもスルーしてしまいます。 そこで、ドメインのチェックも行おうとしているのですが、ここで詰まっています。 ちなみに今回は携帯のアドレスに限定してチェックを行おうと思っています。 javascriptでの正規表現について書いてあるページを見ながら下の様に書いたのですが上手く動作してくれません。 正規表現の書き方がおかしいのだろうとは思うのですが、どこがいけないのかよく分かりません。 if (!this.value.match(/^[\x01-\x7F]+@((([-a-z0-9]+\.)*[a-z]+)|(\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}))$/) || /*ここから下を追加*/ (!this.value.match(/@(docomo|ezweb|softbank)\.ne\.jp$/) || !this.value.match(/@i\.softbank\.jp$/)){ alert("error"); } 最初はもとからある基本的な入力形式のチェックを行い、また@後のドメインが携帯のドメインでない場合にエラーを返す。というつもりで書きました。 ですが、***@docomo.ne.jpとしてもエラーが返って来てしまいます。 原因を教えていただけますか? また、もとからあった正規表現が何をどういう指定しているのかもキチンとは理解していないので、教えていただけるとうれしいです。 よろしくお願いします。

  • (?:系の正規表現

    perlの正規表現で以下の意味は、ABC01かABC99のみマッチするということでよいでしょうか? /^ABC(?:01|99)$/ (?:は$1など使用しない場合に用いるで正しいでしょうか? (?系の正規表現について知識不足ですが、一覧や詳しい書籍がありましたら教えてください。 昔、 /^ABC01|99$/ とかいて、ABC99がマッチせず、99がマッチしたので、|を使うときは、()を書いたのですが$1など変に作用させたくなかったので、最近(?:系の存在を知ってもっと詳しく知りたくなりました。 (?:はPerlの正規表現特有のものでしょうか?

    • ベストアンサー
    • Perl
  • 正規表現を教えてください。

    正規表現を教えてください。 C#で正規表現を用いた文字列検索を勉強中なのですが、うまくマッチさせることができません。教えていただけないでしょうか。 検索対象の文字列は下のようになります。 キーワード;値; 文字列中に該当するキーワードが存在する場合に、その値を取得するプログラムを考えています。しかし、私の正規表現では2つ目の「;」を検出してしまい、キーワードのみを取得することが出来ずに困っています。 見当違いの表記をしているとは思うのですがどなたかお助けください。 match = Regex.Match(line, "^(.*);"); C#初心者なものです。

専門家に質問してみよう