私は与えられたパスワードが含まれていることを検証する正規表現を想起しようとしている: 1.大文字 2.小文字 3.数 4を。残念ながら、私はJavaのorg.apache.regexp.REクラスを使用する従来のシステムに限定していJavaのREクラス - 先読み(パスワードのバリデータを実装する)
RE r = new RE("^(?=.*[A-Za-z])(?=.*\\d)[A-Za-z\\[email protected]$!%*#?&]{8,}$");
:
8文字以上では、私はそのような制約を定義するには、次の正規表現を見つけました。は先読みなしに、私は、次の正規表現として1-3のルールを定義することができた:「?=」
RE r = new RE("^(((.*([A-Z]+).*([0-9]+).*|.*([0-9]+).*([A-Z]+)).*)$)")
が、私は使用しなくても、この文字列に長さパラメータを追加する方法がわかりませんメタキャラクター。
コンパイルしようとしている "(?= ...)" 次のエラーで失敗します。
org.apache.regexp.RESyntaxException: Syntax error: Missing operand to closure
at org.apache.regexp.RECompiler.syntaxError(Unknown Source)
at org.apache.regexp.RECompiler.terminal(Unknown Source)
at org.apache.regexp.RECompiler.closure(Unknown Source)
at org.apache.regexp.RECompiler.branch(Unknown Source)
at org.apache.regexp.RECompiler.expr(Unknown Source)
at org.apache.regexp.RECompiler.terminal(Unknown Source)
at org.apache.regexp.RECompiler.closure(Unknown Source)
at org.apache.regexp.RECompiler.branch(Unknown Source)
at org.apache.regexp.RECompiler.expr(Unknown Source)
at org.apache.regexp.RECompiler.compile(Unknown Source)
at org.apache.regexp.RE.<init>(Unknown Source)
at org.apache.regexp.RE.<init>(Unknown Source)
at com.idit.hscx.passwordTest.testPassword(passwordTest.java:16)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at org.junit.internal.runners.JUnit38ClassRunner.run(JUnit38ClassRunner.java:84)
at org.junit.runner.JUnitCore.run(JUnitCore.java:160)
at com.intellij.junit4.JUnit4IdeaTestRunner.startRunnerWithArgs(JUnit4IdeaTestRunner.java:78)
at com.intellij.rt.execution.junit.JUnitStarter.prepareStreamsAndStart(JUnitStarter.java:212)
at com.intellij.rt.execution.junit.JUnitStarter.main(JUnitStarter.java:68)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at com.intellij.rt.execution.application.AppMain.main(AppMain.java:140)
私の質問: は "先読み" はクラスREに存在しているのですか? そうでなければ、どのようにREクラスの正規表現で "AND"演算子を実装しますか?
ありがとうございました!
制限がある場合は、それらの文字の存在を単純にチェックしてください。 – rock321987
2つの正規表現を使用してください。ただ1つだけ必要な理由はありません – Laurel
2つの質問:Q1 '^(?=。{0,8} [az])'や '^(?=。?)のような固定数の文字で先読みを使うとどうなりますか?無限の '。*?'の代わりに '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' Q2 '(?<= [az]。{0,8})$'や '(?<= [az]。?。?。?。?)のようなlookbehindを使うとどうなりますか? ?)$ '。私はjavaが本当に無限のlookaroundsを好まないので頼む。 –