プロが教えるわが家の防犯対策術!

ネットでの通信販売などで、お客様情報を
入力するフォームとかありますよね。

そこで疑問があります。

電話番号で「-(ハイフン)」をなしにする必要があるフォームが
たびたびあります。(半角数字のみの入力)
あれは、CGI側でハイフンをとって格納すればいいと
思うのですが、なぜそうしないのですか?

もちろん、理由は作れるとは思います。
・ハイフン以外を使う人がいるかも「@」とか「:」とか
などです。

まあ、原理的には色々と考えられますが、実際のところ、
現実的には、「-(ハイフン)」をとって格納すれば問題は
生じないと思います。

仕事でフォームを作ることもありますが、自分の場合はそうしていて、
問題になったことなどありません。
(実装も極めて簡単です)

もちろん、ものごとには一長一短あって、メリット・デメリットあると思います。
結局
「総合してどちらがいいか」
にはなりますが、なぜ、現状のような「ー(ハイフン)禁止」が多いのでしょうか。
メリットはあるのでしょうか。

フォーム作成者に質問です。

A 回答 (8件)

プログラマです。



ある程度大きな組織で、CGIなどを用いて開発をしていました。
組織的に開発していたので、独学ではなく、ある程度ちゃんと
したプログラムを書いていたと思います。(たぶん、誰もが知っている組織です)
(開発は「コードレビュー」という制度があり、他のプログラマのチェックを絶えず受ける)

質問者様のいう指摘はもっともだと思います。
ここでは書きませんが入力データの格納方法は様々で
他の回答者が言うような
「データには手を付けないで保管するのが基本」
などという常識は全くありません。
むしろ
「状況に応じて、いかに効率よく(わかりやすく)格納するか」
というほうがプログラマの腕の見せ所です。

そういう観点でみると、フォーム入力の場合、
「確認画面でハイフンなどを消したもの(もしくはハイフンを加えたもの)を表示する」
がもっともユーザフレンドリなCGIだと思います。
つまり、
(ある程度)入力したものから答えを推測して、処理系に適したフォーマットに整形する
ということです。
「推測」とかくと「推測はだめだ。外れることもある」などと言われそうですが、
フォームの性質上、入力間違いは普通にありますし、「半角数字だけ抜き出す」で
十分対応できます。
実際、私が書くときはそのような考えは常に持っています。

だけど、実際のところは、多くの2流プログラマは
「動けばいい」
「わかりにくくさえなければいい」
「ある程度、不便でも間違わなければいい」
などと
「ある程度ユーザが真面目に入力する」
を前提にしているんです。
それで、納品には耐えられますし、よりユーザフレンドリな
インターフェースは仕様書には現れません。
仕様書にあるのは、
「電話番号を入力し、格納すること」
などであって、
「ハイフンの有無にかかわらずに入力できる」
などまで書かれません。
つまり単純にプログラマの質の問題です。
会社によっては、レビューもほとんどなく納品までこぎつけますし、
「ユーザフレンドリ」
の度合いについては、そこまで厳しくない場合も多いです。
また、フォームなどは使いまわすので、改善されにくい面もあります。

しかし、入力者が数人ならばいいですが、大きなシステムとなると、
何万人もそのフォームを使いますので、
「プログラムの行数が増えて大変」
とか
「格納配列が多くなって可読性が下がる」
みたいな理由で、プログラマが「不便を許容」することはあり得ません。
単に、そのプログラマが
「そういう方法が思いつかないだけ」
です。

実際、フォームを見てもらえればわかりますが、ハイフンの有無に関係ない
フォームもありますよ。
    • good
    • 0
この回答へのお礼

専門家のご意見参考になります。

確かに、開発者って人によって
「便利さを追求する人」
もいるし
「そういうのは無駄」
っていか、そもそも、最低限の機能以外考えない人っていますね。
「プログラマの質の問題」
というのはとても納得です。

普段作っている側で、使う側から見ると
「このCGIはこうすれば利便性高まるのに」
って結構ありますよね。
その一つが「フォームの電話番号」でした。

お礼日時:2018/01/30 00:13

> ネットでの通信販売などで、お客様情報を


> 入力するフォームとかありますよね。

てかこの文面見てませんでした。
これであれば、スマホ対応していたとしても、ハイフン禁止しなくていいと思いますね。
ただ明記しているだけで許可されているかもしれませんが、マジで禁止しているなら、システム側の都合があるか、他の記号なども禁止しなければらないのだからという理由で一律禁止しているかのどちらかではないでしょうかね。

何か怪しい動作で複数注文されていたりだとか、何かあった時にみたいな分析や集計とかで電話番号を使うから、数字だけの方が都合がいい、ということから、ハイフン禁止とか。

どの道、内部でどんな管理をしてようが、ユーザーが入力していない値を確認や登録値としてユーザーに見せるというのはおかしいと思いますけどね。
    • good
    • 1

なんか思ったのが、作ってるシステムのモノに依存した考えではありませんか?


それは今までの回答も然りかと思いました。
色んな場合があるので、一律どうだってことないんじゃないですかね。

ハイフン禁止にするメリットは、ユーザーの立場では無く、システム側の都合だけかもしれませんね。
ハイフン禁止と謳われていて、マジでハイフンが入力できない一般人が利用できるサイトって一例だせますか?

例えば懸賞の応募ページ。
これは、ハイフンが入っていようがいまいが、一律ハイフンを取り除いてDB格納してもいいでしょう。
むしろその方がシステム上、『都合がいい』かもしれない。
確認ページまでは入力された値で表示してるけど、どうせユーザーには二度と表示することがないし、DBでは数字のみにしてるぜ!という。
事実、めざましテレビのじゃんけんの応募ページなどは、半角数字のみを入れてくださいとされる入力欄で、ハイフンを入れてもエラーになりません。
内部でどうしているかは知りませんが。

例えばアカウント関係のページ。
これは、ハイフンが入っていようがいまいが、入力された値がそのままDB格納されるべきでしょう。
勝手に取り除いたり付け加えたりすることにより、『意図しない値で登録される』と認識する人間は絶対数います。
更には、UXなどの関係上、確認ページなど設けない場合もあり得ます。
にも関わらず入力値と異なる値が登録されたら、それは逆にUXのレベルが低いですよね。
私なら、こっちが求めてもいねー値に勝手に変えやがってとムカつきますし、とりあえず文句は言います。

例えば世界レベル(ローカライズされていない)のページ。
絶対的に正しいという基準がありませんから、これもアカウント関係のページと同じでしょうね。

例えば社内システムや、複数のシステムが乱立して成り立っているなどのページ。
システムが1つだけとは限らず、他システムと連携する場合もあります。
そのせいで、そもそも入力欄を3つに『分けなければならない』ということもあり得ます。
逆にハイフンを絶対に入れないとダメというパターンもあるかもしれません。

例えばスマホ対応しているページ。
スマホでは、<input type="tel" />である時、数字キーボードが表示され、ハイフンは入力できません。
他の入力要素(numberなど)にすることでユーザビリティが下がります。
しかし、習慣などで『03-1234-5678』のようにやりたがります。
その関係上、注意喚起の意味で『ハイフン禁止』(ハイフンは入力できません)と謳っているかもしれませんが、PCでやってみると、案外ハイフンが許可されていたり、なんてこともあり得るでしょう。

ちなみに個人的にはですが、電話番号レベル『だけ』で、DBのバイナリ型の列に登録なんて、どんなDBを利用していても経験上、一度も見たことありません。
    • good
    • 1

> 「半角数字以外は取り除く」



ユーザーが自分が入力したものと違うものが表示されたら不信に思うでしょ
データ管理の基本中の基本、ユーザーから渡されたデータは原則
変化せずに登録するんですよ(逆に不正なデータは登録しない)
そのために不正なデータは入力時点で間違いだと知らしめるのがあるべき姿です。
    • good
    • 1
この回答へのお礼

失礼ですが、現場での経験はありますか??

言語にもよりますが、データ管理方法など千差万別。
そもそも「変化せずに登録」って何ですか。
言語によってはオブジェクト管理しますよね。
バイナリ管理しますよね。圧縮したり、ほかのデータと一緒に配列を作ったりしますよね。
様々な変換や格納方法がありますよね。
元のデータに戻ればいいんですよ。
「ハイフンを取り除く」
だって、もし必要ならば、その情報を保持することなんてコーディン上全然面倒な
ことじゃないですよね。

元データを配列に格納しつつ、正しいデータとして取り扱うなんて、
全然難しいことではないですよ。

データが二つ必要だとか、メモリの無駄遣い、とかいうかもしれませんが、
多くの処理系において、ユーザが意識しない配列や変数なんて山ほどありますよ。

例えば、内部で、配列を二つ用意すればいいだけです。
それが手間だとかいうかもしれませんが、まともなプログラマなら、
ユーザ側の手間と天秤にかけますし、私の感覚(や周囲のプロと話した感覚)だと
その手間を惜しむような理由は想像できないんです。

もちろん、一長一短、デメリットもあるしメリットもある。
結局は総合判断ですよ。だけど、総合判断すると、上述の意見なんです。

お礼日時:2018/01/29 19:06

や、だから、半角数字以外を取り除くとかそういう次元の話ではなくて、どのような人、どのような端末やアプリケーションでも無理なく入力できる最小公約数な入力方式が好まれているわけですが。


日本人だろうがアメリカ人だろうが。
フロントエンドがwebページだろうがクライアントアプリだろうが。
数値チェックなどは、それに付随して行われているだけです。
だから、電話番号の入力の他に国コードの入力を要する場合もありますよね。
日本人でPC限定でしか考えてないサイトやページは、ハイフン制約があったり、そもそも入力欄が3つに分かれてたりしますよ。
    • good
    • 1
この回答へのお礼

実際の現場でForm作成した経験者はありますか。

お礼日時:2018/01/29 18:59

入力する端末がPCだけとは限らないから。


スマホからだと数値キーボードを利用するため、ハイフンを入力できないとかね。
    • good
    • 1
この回答へのお礼

「半角数字以外は取り除く」
でいい気がするんです。

失礼ながら経験者ですか?

開発経験者ならば自然な発想だと思うのですが。

お礼日時:2018/01/26 22:33

そもそもハイフン自体が変動するからです



たとえば多摩地区だと昔
042x-yy-zzzzだったのが今は042-yyy-zzzzになっています
電話局の都合で変わる可能性があるものをあえてユーザーに書かせる意味がありません。
(市外局番なしでかけなくてはいけない理由もないし)

携帯だと多くの人が
090-xxxx-yyyyという区切りが正しいと思っているきらいがありますが
実際には会社の区切りで考えると090-xxx-yyyyyが正しいと考えるべきです。

そんなふわっとしたハイフンの位置をユーザーに正確に入れさせることができますか?
そういう諸事情を鑑みれば、ハイフン無しの入力が最強です
    • good
    • 0
この回答へのお礼

「半角数字以外は取り除く」
でいい気がするんです。

失礼ながら経験者ですか?

開発経験者ならば自然な発想だと思うのですが。

お礼日時:2018/01/26 22:33

ひとことで言えば、CGI 作成側の技術的なコストの問題です。



"-" の記号は一意ではありません。半角の場合、マイナスと長音があり、全角の場合だともっと色々あります。
更に、市内局番を ( ) で括る人もいます。これらを取り除くのに数十ステップは費やします。

数字だけに限定すれば簡単に処理できるのに余計な文字が入るとそれを取り除く為にとても複雑な処理をしなければならないのです。

入力時点で後々不要となる記号類をはじいておけばその後の処理は楽です。

ゴミの分別をお願いするのと同じです。
    • good
    • 1
この回答へのお礼

数字以外を取り除くってかなり楽な処理じゃないですか?
経験者から見ると、
「なぜやらないの?」
って思うんです。

失礼ながら経験者ですか?

お礼日時:2018/01/26 22:32

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!