• ベストアンサー

電話番号入力確認 やっぱり分かりません。

以前電話番号の入力に関する質問をしていて、いろいろご回答頂き自分で取り組んだのですが、やはり分かりません。一様、下記のコードを制作したのですが、まだ、ちゃんと動かない状態です。なぜちゃんと動かないかお分かりの方、おられましたら教えて下さい。 電話番号の判定に関する正規表現 $tel1は市外局番、 $tel2は市内局番、 $tel3はお客様番号 ついでに$tel4は内線番号としたい。 それでどのような判定を正規表現でしたいかというと 1)まず、この電話番号入力欄は入力しても空欄でもよい。 2)ただし、$tel1、 $tel2又は$tel3の一つにでも入力した場合は、他の二つにも(たとえば、$tel1に入力した場合には$tel2及び$tel3にも)必ず入力しなければならない。 3)$tel4は空欄でも入力しても良いが、$tel4を入力する場合は必ずtel1、 $tel2及び$tel3が入力されている必要がある。 4)tel1、 $tel2、$tel3及び$tel4に入力がある場合は、数字のみ可能。 これらの判定は、ばらばらに行なうのではなくまとめて行ないます。そのため結果は「電話番号正確」又は「電話番号不正確」のどちらかが1回のみ出力されるようにします。 以下は、目指す表示結果です。 この場合、「電話番号不正確」としたい。 $tel1 = 123 $tel2 = 空欄 $tel3 = 789 $tel4 = 空欄 この場合、「電話番号不正確」としたい。 $tel1 = a $tel2 = 456 $tel3 = 789 $tel4 = 空欄 この場合、「電話番号不正確」としたい。 $tel1 = 空欄 $tel2 = 空欄 $tel3 = 空欄 $tel4 = 101 この場合、「電話番号不正確」としたい。 $tel1 = 123 $tel2 = 456 $tel3 = 789 $tel4 = a この場合、「電話番号正確」としたい。 $tel1 = 123 $tel2 = 456 $tel3 = 789 $tel4 = 空欄 この場合、「電話番号正確」としたい。 $tel1 = 123 $tel2 = 456 $tel3 = 789 $tel4 = 101 この場合、「電話番号正確」としたい。 $tel1 = 空欄 $tel2 = 空欄 $tel3 = 空欄 $tel4 = 空欄 以下の私のコードはちゃんと動作しません。なぜか分かりません。 <?php $tel_flg1 = 0; $tel_flg2 = 0; $mix = $tel1 . $tel2 . $tel3; if ($tel1 != "" or $tel2 != "" or $tel3 !="" or $tel4 !=""){ if (!ereg("^[0-9]+$", $mix)) { $tel_flg1 = 1; } } if ($tel4 != ""){ if (!ereg("^[0-9]+$", $tel4)) { $tel_flg2 = 1; } } if ($tel_flg1 == 1 or $tel_flg2 == 1) { echo '電話番号不正確'; }else{ echo '電話番号正確'; } ?> コードを修正していただくか、正しいコードを教えていただければ幸いです。 コードが修正可能なら、修正していただいた方がどこを間違えていたのか理解しやすいです。 よろしくお願いします。

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

  • ベストアンサー
回答No.2

簡単に・・ $flag = false; if( ( $tel1 != "" ) || ( $tel2 != "" ) || ( $tel3 != "" ) ){ if( ( $tel1 != "" ) && ( $tel2 != "" ) && ( $tel3 != "" ) ){ $tel = $tel1.$tel2.$tel3; if( ereg("^[0-9]+$", $tel ) ){ if( ( $tel4 == "" ) || ( ereg("^[0-9]+$", $tel4 ) ) ){ $flag = true; } } } } else if( ( $tel1 == "" ) && ( $tel2 == "" ) && ( $tel3 == "" ) && ( $tel4 == "" ) ){ $flag = true; } とか。

kitty1000
質問者

補足

mahimahi02さん ご回答ありがとうございました。 mahimahi02さんのコードを参考にいろいろ自分で考えて見ます。 一旦スレッドを閉じます。

全文を見る
すると、全ての回答が全文表示されます。

その他の回答 (4)

  • tany180sx
  • ベストアンサー率63% (239/379)
回答No.5

> 修正コードを教えて下さい。 // 条件(2) if (strlen($mix) && (!strlen($tel1) || !strlen($tel2) || !strlen($tel3))) { $tel_flg1 = 1; } > intなのかstringなのかはっきりしましょう。 $mixって書いたの私です、すいません。 ただ、リクエスト値はstringになりますし文字連結によってもstringになります。 PHPは思わぬところで型の問題が出るので気をつけます。? > 修正コードを教えて下さい。 禁止事項「作業依頼」に触れそうなのでお気をつけ下さい。

kitty1000
質問者

補足

tany180sxさん ご回答ありがとうございました。 上記の件、了解しました。

全文を見る
すると、全ての回答が全文表示されます。
  • wp_
  • ベストアンサー率54% (132/242)
回答No.4

なんだかなぁ・・・ いかにも「努力したくないです」なスタンスが見え隠れしててアドバイスするかどうか迷いましたが・・・ あと何故ereg()に拘るのか理解に苦しむ・・・ データフロー図は書きましたか。 当方、何度か「フロー図すら描かずいきなりソースを書き始める新人」を見てきましたが そういう奴は決まって全く成長しません。 言っても書かない馬鹿は首を切られていきました。(使えないから) ロジカルな思考が十二分に出来ないうちは必ず紙に書きましょう。 intなのかstringなのかはっきりしましょう。 連結してチェックするアイデア自体は素晴らしいですが、 intの思い込みで思わぬオーバーフローを引き起こす可能性があります。 No.3の方の言うとおりnullチェックが曖昧にもなるし。 function check($arg) {  if($arg === "")   return null;  if(!is_numeric($arg))   return false;  return true; } $status1 = check($n1); $status2 = check($n2); $status3 = check($n3); $status4 = check($n4); $ret = false; if(  is_null($status1)  && is_null($status2)  && is_null($status3)  && is_null($status4) )  $ret = true; if(  $status1  && $status2  && $status3  && $status4 !== false )  $ret = true; ここまで書いて駄目でしたら僕の方からはお手上げです。

kitty1000
質問者

補足

wp_さん ご回答ありがとうございました。 wp_さんは、かなり知識をおもちのようですが、残念ながら今の私にはwp_さんのいっておられることを完全には理解できません。 いずれにせよ、ご協力ありがとうございました。

全文を見る
すると、全ての回答が全文表示されます。
回答No.3

どこかに入力があった時に$mixが数値であることを確認したので は、tel1~tel3までに全部入ってるか判りません。どれか一つだけ に入力があってもオッケーになっちゃいます。ここは、「$mixが空 じゃない」をどこかに何か入力があった指標にして、tel1~tel3ま でが数値である確認を個別にすべきです。 たとえば $flag = true; $mix = $tel1 . $tel2 . $tel3 . $tel4; if(strlen($mix)) { $flag = is_numeric($tel1) && is_numeric($tel2) && is_numeric($tel3); if(strlen($tel4)) { $flag = $flag && is_numeric($tel4); } } こんな感じ。

kitty1000
質問者

補足

grumpy_the_dwarfさん ご回答ありがとうございました。 参考にさせて頂きます。

全文を見る
すると、全ての回答が全文表示されます。
  • tany180sx
  • ベストアンサー率63% (239/379)
回答No.1

条件(2)の処理がありません。

kitty1000
質問者

お礼

このスレッドでは修正コードをお聞きしています。 実際にコードを試してみてどのような動作が不足しているかは理解できているため、どのような処理が足りていないかの言葉の表現は余り必要ではありませ。足りない動作が分かっていてもコードをどのように修正したらよいか分からないからお聞きしています。

kitty1000
質問者

補足

tany180sxさん ご回答ありがとうございました。 不足している部分が存在しているのは気が付いていますが、実際コードをどのように修正してよいものやら分かりません。修正コードを教えて下さい。そうしないと、いたちごっこです。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • 電話番号 正規表現

    このスレッドは、http://oshiete1.goo.ne.jp/qa3565776.htmlから移動してきました。私が追記する欄がなくなってしまったことと、内容をまとめたかったからです。マルチスレッドにならないように以前のスレッドは締め切ります。 電話番号の判定に関する正規表現 $tel1は市外局番、 $tel2は市内局番、 $tel3はお客様番号 ついでに$tel4は内線番号としたい。 それでどのような判定を正規表現でしたいかというと 1)まず、この電話番号入力欄は入力しても空欄でもよい。 2)ただし、$tel1、 $tel2又は$tel3の一つにでも入力した場合は、他の二つにも(たとえば、$tel1に入力した場合には$tel2及び$tel3にも)必ず入力しなければならない。 3)$tel4は空欄でも入力しても良いが、$tel4を入力する場合は必ずtel1、 $tel2及び$tel3が入力されている必要がある。 4)tel1、 $tel2、$tel3及び$tel4に入力がある場合は、数字のみ可能。 これってどのようなコードになるのでしょうか? ちなみに私が考えているコードを書いときますが、数字以外でも入力できてしまいます。入力がある場合は、数字しか入力できないようにしているはずなのに... <?php if($tel1 != "" or $tel2 != "" or $tel3 != "") { if($tel1 == "" or $tel2 == "" or $tel3 == "") { if(!ereg("^[0-9]+$", $tel1) or !ereg("^[0-9]+$", $tel2) or !ereg("^[0-9]+$", $tel3) or !ereg("^([0-9]+|\t)$", $tel4)) { echo '電話番号不正確'; } } }else{ echo '電話番号正確'; } ?> 以下は、目指す表示結果です。 この場合、「電話番号不正確」としたい。 $tel1 = 123 $tel2 = 空欄 $tel3 = 789 $tel4 = 空欄 この場合、「電話番号不正確」としたい。 $tel1 = a $tel2 = 456 $tel3 = 789 $tel4 = 空欄 この場合、「電話番号不正確」としたい。 $tel1 = 空欄 $tel2 = 空欄 $tel3 = 空欄 $tel4 = 101 この場合、「電話番号不正確」としたい。 $tel1 = 123 $tel2 = 456 $tel3 = 789 $tel4 = a この場合、「電話番号正確」としたい。 $tel1 = 123 $tel2 = 456 $tel3 = 789 $tel4 = 空欄 この場合、「電話番号正確」としたい。 $tel1 = 123 $tel2 = 456 $tel3 = 789 $tel4 = 101 この場合、「電話番号正確」としたい。 $tel1 = 空欄 $tel2 = 空欄 $tel3 = 空欄 $tel4 = 空欄 以下のコードをwpさんに教えてもらったが、現在、以下の問題点が存在する。 <?php if(!is_numeric($tel4))  echo "電話番号不正確"; ?> <?php $ret1 = true; $ret2 = true; $ret3 = true; if( ! is_numeric($tel1))  $ret1 = false; if( ! is_numeric($tel2))  $ret2 = false; if( ! is_numeric($tel3))  $ret3 = false; if($ret1 and $ret2 and $ret3)  echo "電話番号正確"; else  echo "電話番号不正確"; ?> 問題1)上記のコードではtel4をtel1,tel2,$tel3から切り離して取り扱っているため下記がただしく判定できない。 この場合、「電話番号不正確」としたい。 $tel1 = 空欄 $tel2 = 空欄 $tel3 = 空欄 $tel4 = 101 問題2) 下記の条件を一まとめにして >1)まず、この電話番号入力欄は入力しても空欄でもよい。 >2)ただし、$tel1、 $tel2又は$tel3の一つにでも入力した場合は、他の二つにも(たとえば、$tel1に入力した場合には$tel2及び$tel3にも)必ず入力しなければならない。 >3)$tel4は空欄でも入力しても良いが、$tel4を入力する場合は必ずtel1、 $tel2及び$tel3が入力されている必要がある。 >4)tel1、 $tel2、$tel3及び$tel4に入力がある場合は、数字のみ可能。 一度だけ、「echo "電話番号正確";」又は「echo "電話番号不正確";」を出力したいわけですが、それができない。($tel1,$tel2,$tel3で、「echo "電話番号正確";」又は「echo "電話番号不正確";」の判定結果を出力、そして、別途、$tel4で、「echo "電話番号正確";」又は「echo "電話番号不正確";」の判定結果を出力とはしたくないわけです。) 問題3) >1)まず、この電話番号入力欄は入力しても空欄でもよい。 としたいのだが、私の記憶ではis_numericを使用した場合は空欄を受け付けなかったと思う。つまり下記が正しく判定できない。 この場合、「電話番号正確」としたい。 $tel1 = 空欄 $tel2 = 空欄 $tel3 = 空欄 $tel4 = 空欄 また、is_numericは[0-9]以外にも「+」なども受け付けてしまったような気がする。 どなたかお分かりの方がおられましたら、コードを修正するかコードを教えて下さい。

    • 締切済み
    • PHP
  • 電話番号のチェック ハイフン無しの場合について

    Webサイトに問い合わせフォームを設けているのですが、電話番号のチェックで改善したいことがあります。 現状の問い合わせフォームでは、桁数が異なる場合と数字以外が入力されたら「エラー」を返しているのですが、次のように、ハイフン無しの数字だけで入力した場合、「エラー」になってしまいます。 090******** 03******** 現状、ハイフン有りで入力した場合でしか「正確」にならないので、ハイフン無しで入力した場合も「正確」にしたいです。 ちなみに、電話番号のコードは次の通りです。 $tel = htmlspecialchars($_POST['tel'], ENT_QUOTES, "UTF-8"); $telError = false; if (!preg_match( '/^[0-9]{2,4}-[0-9]{2,4}-[0-9]{3,4}$/', $tel)) { $telError = true; $tel='※正しい電話番号を指定してください。'; } どのようなコードにしたら、ハイフンなしでもエラーチェックができるでしょうか?

    • ベストアンサー
    • PHP
  • 電話番号かどうかを判断したい(Perl)

    フォームに入力された文字が電話番号かどうかを判断したいと考えています。 ハイフンは使いません。 if ($$in{tel} =‾ /¥-/) { &error("電話番号はハイフン( - )なしの10桁または11桁でご記入ください"); } if ($$in{tel} =‾ /^\d{10,}+$/) { &error("電話番号はハイフン( - )なしの市外局番からご記入ください"); } このようにしてみたのですが、うまく動きません。 どうすればいいんでしょうか... よければ教えてください。

    • ベストアンサー
    • Perl
  • 電話番号の入力チェック

    ハイフン付きの電話番号のチェックをしようとしています。いろいろ調べていますがうまくいきません。5桁までの半角数字-5桁までの半角数字-5桁までの半角数字という書式のチェックを考えています。 if (ereg("^[0-9]{1,5}-?[0-9]{1,5}-?[0-9]{1,5}$", $str )) { return true; } else { return false; } で中途半端になってチェックされます。 間違っているのか?他に書き方があるのか?教えてください。 宜しくお願いいたします。

    • ベストアンサー
    • PHP
  • 電話番号チェックアラートについて【javascript】

    入力フォームアラート設定について、教えて下さい。 やりたい事。 1.入力項目の値が空白の場合は【「電話番号」を入力してください】を表示。 2.入力項目の値が電話番号の形式でない場合は、【「電話番号」を[xxxx-xxxx-xxxx]形式で入力してください。】を表示。 3.電話番号形式でも13桁以上の場合は、【「電話番号」は「-」を含む半角12~13桁です。】を表示 とアラートを表示させる設定を行っているのですが、下記、内容をどのような形に変更すればいいかがわからず困っております。 どなたかご回答いただけませんでしょうか? javascript初心者なもので細かい書き方がわかりません。 ----javascript-------------------------------- <script language="JavaScript" type="text/javascript"> function CheckForm(theform) { var FormOK = false; if (theform.tel.value =="") { FieldControl(theform.To, "「電話番号」を入力してください。"); }else if (theform.tel.value =="") { FieldControl(theform.To, "「電話番号」を[xxxx-xxxx-xxxx]形式で入力してください。"); }else if (theform.tel.value == "") { FieldControl(theform.To, "「電話番号」は「-」を含む半角12~13桁です。"); }else{ FormOK = true; } return FormOK; } function FieldControl(element, message) { alert(message); } </script> -------HTML----------------- <form action="" method="post" name="theform" onsubmit="return CheckForm(this);"> <p>電話番号:<input size="13" name="tel"></p> <input value="確認画面へ" name="submit" type="submit"> </form> 宜しくお願い致します。

  • 海外サイトでの電話番号と郵便番号の入力について

    海外サイトでの電話番号と郵便番号の入力方法を教えてください。 例えば電話番号012-123-456 郵便番号103-1234の場合 どのように入力すればいいですか? サイトには Phone with area code Ex.(000)000-0000 Zip / Postal Code と書かれています。 宜しくお願いします。

  • ワードで上下の電話番号の文字列を揃える簡単な方法

    例としてですが、ワード2010や2007で、電話番号を2段に揃えて書く場合です。 電話番号は、仮に「123-456-789」としておくとします。 ここでは2つのパターンを例とします。 一つ目は空欄を入れずに、 TEL123-456-789   123-456-789 とします。 二つ目は、例えばコロンを入れ、 TEL:123-456-789    123-456-789 とするとします。 この場合、上下の電話番号の位置を、行頭から全角や半角の空白で調節しても、僅かにずれていることを確認できます。 そこで、このような場合に上下の見た目を揃える簡単な方法はありますでしょうか。 よろしくお願いします。

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

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

    • ベストアンサー
    • PHP
  • VKの電話番号認証の仕方

    VKというソーシャルネットワークに登録したいのですが、電話番号登録(コードを取得)が上手くいきません。 携帯電話番号で登録したいのですが、何度やっても「間違った電話番号。 正確な電話番号を入力して下さい」とエラーがでます。 例に習って番号の登録を空けてもダメ・・ どなたか分かる方教えて下さい。

  • 差出人の電話番号入力の件

    筆まめバージョン28 差出人の電話番号を、独立して、「TEL・FAX ~」として入力したいのですが、方法がわかりません。どうか教えてください。 ※OKWAVEより補足:「ソースネクスト株式会社の製品・サービス」についての質問です。