文字列がパスワードポリシーを満たすか確認する(入力値確認 2)

2022年2月8日火曜日

VB.NET 文字列操作

t f B! P L
 前回は文字数が半角換算で指定の範囲内かどうかの確認を御紹介いたしました。

今回は文字列に指定された文字が含まれるかどうかの判断です。
実際のシステムでよく使用するパターンとしては
パスワードの設定を行なう際などですね。
パスワードは○文字以上、半角でアルファベット大文字・小文字・数値・記号の
いずれか2つを含むことなどの条件が設定されており、
登録時にその条件を満たすかどうか確認するようなケースです。
こちらもシステム開発時にはよく使用される確認事項かと思います。

ではサンプルを用いて御紹介します。
ある文字列に特定の文字や文字列が含まれているかどうかを確認する関数としては
ContainsメソッドやIndexOfメソッドなど複数存在します。
パスワード規則のようにアルファベット大文字・小文字・数値・記号の
いずれかが含まれるかを確認する際に、1文字づつ確認しているようでは
かなりの数の文字を確認する必要がありかなり大変です。
このような場合は「正規表現」を使用することで簡単に確認することが可能です。

ではサンプルを見てみましょう
今回のような例では「Regex」クラスの「IsMatch」メソッドを利用すると
正規表現を利用し確認すると簡単に確認することが可能です。
「IsMatch」メソッドを利用すると特定の文字列に正規表現で指定された文字列が
含まれていた場合「True」、含まれていない場合「False」が戻り値として返されます。

System.Text.RegularExpressions.Regex.IsMatch("ABC123", "[A-Z]") '→True
System.Text.RegularExpressions.Regex.IsMatch("ABC123""[a-z]") '→False
System.Text.RegularExpressions.Regex.IsMatch("ABC123""[0-9]") '→True

以上のような形でアルファベットのAからZや数字の0から9のいづれかを
含む確認を行うことができます。
また、記号のように範囲で指定できない場合は文字を続けて指定すれば
確認することができます。

System.Text.RegularExpressions.Regex.IsMatch("A@b", "[#$%&@+:_*]")    '→True
System.Text.RegularExpressions.Regex.IsMatch("A!b", "[#$%&@+:_*]")    '→False

ここまでできれば、含まれる文字の種類をカウントしたり、
文字数を確認すればパスワードの必要要件を満たしているかどうかを
確認することが可能です。

今回は正規表現による文字列のパターン確認を御紹介させていただきました。
他にもいろいろと方法もございますし、
開発するシステムによっては、よりふさわしい方法もあるかと思いますが、
御参考にしていただければと思います。

また、上記の仕組みを利用し作成したプログラムを
note上で公開しております。
もし興味がございましたら御利用ください。

サンプルはVB.NETで作成しておりますが、
考え方はどんな言語でも同じですので、
参考にしていただければと思います。

 

QooQ