Ich versuche, einen regulären Ausdruck zu zaubern zu überprüfen, ob ein bestimmtes Kennwort enthält: 1. ein Großbuchstaben 2. a Kleinbuchstaben 3. eine Reihe 4 . mindestens 8 Zeichen langJava RE-Klasse - Look-Ahead (implementierende Passwort Validator)
fand ich die folgenden regex solche Einschränkungen zu definieren:
RE r = new RE("^(?=.*[A-Za-z])(?=.*\\d)[A-Za-z\\[email protected]$!%*#?&]{8,}$");
Leider i auf ein Legacy-System beschränkt bin, dass die Java-Klasse verwendet org.apache.regexp.RE.
ohne Look-Ahead, ich war in der Lage Regeln zu definieren 1-3 als die folgenden regex: „=“
RE r = new RE("^(((.*([A-Z]+).*([0-9]+).*|.*([0-9]+).*([A-Z]+)).*)$)")
, aber ich weiß nicht, wie die Längenparameter auf diese Zeichenfolge hinzuzufügen, ohne die Meta-Zeichen.
versuchen, zu kompilieren "(= ...?)" Schlägt mit dem folgenden Fehler:
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)
meine Frage: ist "Look-Ahead" existiert in der Klasse RE? Wenn nicht, wie implementiere ich den Operator "AND" in RE class regex?
danke!
Wenn es so viele Einschränkungen gibt, verwenden Sie einfach die Existenz dieser Zeichen überprüfen – rock321987
Verwenden Sie einfach zwei Regexe. Es gibt keinen Grund, nur einen zu benötigen. – Laurel
Zwei Fragen: Q1 Was passiert, wenn Sie einen Lookahead mit einer festen Anzahl von Zeichen wie '^ (? =. {0,8} [az])' oder '^ (? =.? .?.?.?.?.?.?.? [az]) 'anstelle des unendlichen'. *? '. Q2 Was passiert, wenn Sie einen Lookbehind wie '(? <= [Az]. {0,8}) $' oder '(? <= [Az].?.?.?.?.?.?...?. ?) $ '. Ich frage, weil Java die unendlichen Lookarounds nicht wirklich mag. –