作成日:2024年07月23日
値を正しく入力させる(3)

今回も引き続き文字列の入力です
メールアドレスを入力
メールアドレスの入力を求める機会は少なくありません
入力後に送信テストできれば正誤は確実に判定できますが、その場合でも入力チェックは行う必要があります
大まかに要約してみると下記の通りです
- メールアドレスは、「local-part」と「@」と「domain」で構成される
- 「local-part」は、最大64文字使用できる
- 「domain」は、最大255文字使用できる
- 「local-part」は、「dot-atom」および「quoted-string」が使用できる
- 「domain」は、アルファベット、数字、ハイフンによる1文字以上の文字列を「.」で連結したもの(日本語ドメインはそのまま使用できない)
- 「dot-atom」とは、1文字以上の「atext」で構成された「atom」もしくは「quoted-string」を「.」で連結したもの
- 「atext」とは、アルファベット、数字、記号(!#$%&'*+-/=?^_`{|}~)の事
- 「quoted-string」とは、「"」で囲った文字列で、「atext」に加え、特殊記号(()<>[]:;@\,.")が使用できる(但し、「\」「"」は「\」でエスケープが必要)
このルールから逸脱したメールアドレスは、下記の計算式で制限できます
計算式で制限
While ( [ #domain = "abcdefghijklmnopqrstuvwxyz0123456789-."; #atext = "abcdefghijklmnopqrstuvwxyz0123456789!#$%&'*+-/=?^_`{|}~."; #special = "()<>[]:;@\,\""; #i = 1; #quote = 0; #@ = 0; #error = 0; #escape = 0 ]; #i ≤ Length ( メールアドレス ) and #error = 0; [ #text = Middle ( メールアドレス; #i; 1 ); #quote = Case ( #text = "\"" and #quote = 1; 0; #text = "\""; 1; #quote ); #@ = #@ + Case ( #quote = 1; 0; #escape = 1; 0; #text = "@"; 1; 0 ); #error = Case ( #@ > 1; 1; #text = "\""; #error; #text = "@" and #quote = 1; 1; #text = "@" and #i = 1; 1; #text = "@" and #i = Length ( メールアドレス ); 1; #text = "." and #i = Length ( メールアドレス ); 1; #quote = 1 and Filter ( #text; #atext & #special ) = ""; 1; #quote = 0 and Filter ( #text; #atext & "@" ) = ""; 1; #error ); #escape = Case ( #escape = 1; 0; #text = "\\"; 1; 0 ); #i = #i + 1 ]; If ( #error; False; True ) )
とはいえ、一般的に使用されているメールアドレスはもっと記号が制限されており、チェックももっと簡単にしてもよいでしょう
それよりもこのチェックでは見つけられない単純な入力ミスの方が多いので、ユーザー登録型のシステムであれば、やはり送信チェックに勝る方法はありません
パスワードの入力
新規登録時や長期間利用時のパスワード更新などでパスワードの入力を求める機会があります
昨今のリスクを考慮すれば、最低でも8文字以上、英数記号を全て1文字以上含む程度の強度は欲しいところです
計算式で制限
Case ( Length ( パスワード ) < 8; False; Filter ( パスワード; "abcdefghijklmnopqrstuvwxyz" ) = ""; False; Filter ( パスワード; "ABCDEFGHIJKLMNOPQRSTUVWXYZ" ) = ""; False; Filter ( パスワード; "0123456789" ) = ""; False; Filter ( パスワード; "" ) = "_!#$%&=/*+-"; False; True )
MBSプラグインの正規表現を使用すれば下記の様な記載で対応できます
計算式で制限
MBS( "RegEx.Match"; "^(?=.*?[a-z])(?=.*?[A-Z])(?=.*?[_!#$%&=/*+-])(?=.*?\d)[a-zA-Z\d_!#$%&=/*+-]{8,100}$"; パスワード; 0 )
以上で「値を正しく入力させる」は終了です
ちなみに、イメージイラストの解答は下記の通りです


以上で今日のメモ書きは終了です
内容はいかがでしたか?
もしご意見やご要望、誤りの指摘などありましたら、下記フォームよりお気軽にご連絡ください