正規表現でasciiコード文字クラス

2018-12-05 22:14:34 | 正規表現
色々やり方あると思いますが、x0020-x007eまでに制限したい場合は、
これが一番わかりやすいと思う。
[0-9a-zA-Z -/:-@[~]
hex指定でもいいと思うが、コード見れば何したいか想像つく。

ちなみに-指定で0-9,a-zはOKだが、:-@は気持ち悪いなんて指摘が会社で
あったけど、指摘者の話によると、0-9,a-zは大抵想定通りの順番で並びを保持しているからOK
なんだとか、上手くいくのはたまたまだとか笑

[0-9]のハイフンは
オライリーの正規表現クックブックによると、

「ハイフン(-)は2個の文字の間に配置されると範囲を形成します。文字クラス内の文字範囲はハイフン
の直前の文字と直後の文字の文字コードがその間の数字になっている全ての文字を含みます」

ってことだから、a-zと:-@の指定は文字コードの順番を利用している指定方法という点では全く
同じ意味。指摘者の知識があいまいな故の指摘としか思えない。

Java 正規表現 パスワードで英大文字、英小文字、数字、記号のうち、3種類で8文字以上

2015-11-27 22:20:12 | 正規表現

こんな感じ



String pattern =
"^("
+ "(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])" //英小文字、英大文字、数字
+ "|"
+ "(?=.*[a-z])(?=.*[A-Z])(?=.*[!-/:-@\\[-`{-~])" //英小文字、英大文字、記号
+ "|"
+ "(?=.*[a-z])(?=.*[0-9])(?=.*[!-/:-@\\[-`{-~])" //英小文字、数字、記号
+ "|"
+ "(?=.*[A-Z])(?=.*[0-9])(?=.*[!-/:-@\\[-`{-~])" //英大文字、数字、記号
+ ")"
+ "[a-zA-Z0-9!-/:-@\\[-`{-~]{8,}$"; //英大文字、英小文字、数字、記号8文字以上