1. TOP
  2. 2016年12月

[js] 電話番号のフォーマット、フォームでのバリデーション的なアレ

カテゴリ:
Web
javascript
| トラックバック(0)
投稿者:yo yo

電話番号のパターン

国内固定番号系10桁、最初の桁は「0」
0XXXX X XXXX5桁-1桁-4桁
0XXX XX XXXX4桁-2桁-4桁
0XX XXX XXXX3桁-3桁-4桁
0X XXXX XXXX2桁-4桁-4桁
フリーダイヤル、ナビダイヤル、Q2 (0120,0800,0570,0990)
0XX0 XXX XXX4桁-3桁-3桁
携帯、PHS、IP電話等(020,050,060,070,080,090)11桁、最初の桁は「0」
0X0 XXXX XXXX3桁-4桁-4桁
特番系(110、199他)3桁、最初の桁は「1」
1XX3桁

イメージとコード

フォームに入力された電話番号のjavascriptでのバリデートの流れ。ハイフン有り無しでも正確に判別できるようにする。細かくやるなら「先頭が090か」など逐一条件分岐する。

  1. 先頭が0である
  2. ハイフン(-)でsplitすると、1つ(ハイフン未入力時)、もしくは3つ(ハイフン入力時)に分割できる
  3. ハイフン(-)を除いて10~11桁である
  4. splitした3つの内、1つ目の番号の塊が3桁、2つ目・3つ目が4桁になっている。
  5. splitした3つの内、1つ目の番号の塊が2~5桁、2つ目が1~4桁、3つ目が4桁になっている。

だいたいこんなイメージで下記の様な感じに書く。とりあえずのメモ。コピペしても動きません。


入力欄からハイフンをそもそも消してしまう場合はコレを記述する


参考

[php] 「ページの有効期限切れ・フォーム再送信の確認」の対策

カテゴリ:
Perl / PHP
Web
| トラックバック(0)
投稿者:yo yo

原因

  • SESSIONを使っている
  • POSTでパラメータを送信
  • ブラウザの「戻る」を押した

犯人はだれだ?

原因は、PHPでSESSIONを使うと(デフォルト設定では)自動でキャッシュ制御用のHTTPヘッダーが送出され、それによりクライアント側のキャッシュが使用不可にされるため。(参考:floatingdays: PHPでブラウザキャッシュを有効にする)

つまり、下記条件を全て満たした場合にこの現象が発生する。

  • HTTP POSTで遷移してきた。
  • SESSIONを使っている。(session_start()してるか、php.ini等でsession.auto_start=1に設定している。)
  • 次のページに行ってから、ブラウザの履歴機能(JavaScriptのhistory.back()を含む)で戻ってきた。
PHPで 「Webページの有効期限が切れてます」となる時の傾向と対策 - floatingdays

対策

方法1

session_start()する前に、session_cache_limiter('none')を書く。SESSIONを利用しても余計なHTTPヘッダが送出されない。

  session_cache_limiter('none');
  session_start();
  // フォーム

cache_limiterにnoneというパラメータは無いからパラメータエラーとなり、結果的にHTTPヘッダを送信しないという挙動になっているらしい。

PHP: session_cache_limiter - Manual

方法2 こっちが正解

header();に色々書いて、ブラウザキャッシュを表示させる。ただし、SESSIONの最新情報が入っていないので注意が必要。

  session_start();
  header('Expires:-1');
  header('Cache-Control:');
  header('Pragma:');
  • 1
ページの先頭に戻る