I am creating an identification window with login and username for JavaFX, and I am using regex to make sure that the password contains at least one special character and one di
The *
quantifier "repeats" (quantifies) the pattern it modifies zero or more times in a greedy way (allows the regex engine to "take" (=consume) as many chars as it can with the given pattern). If *
or any other quantifier appears at the start of a pattern, there is no pattern the quantifier can modify, and the error appears.
That is, *abc*
glob pattern used as a regex will produce this same issue, as well as {1,}abc.*
, +abc.*
or {5}+abc.*
, etc.
You may fix the pattern by simply adding a dot in front of the *
here since you expect to match a string that contains a pattern digits...non-word chars...
:
newValue.matches(".*\\d+.*\\W+.*")
// ^
However, a better, more efficient pattern here would be
newValue.matches("\\D*\\d\\w*\\W.*")
It matches
matches
requires a full string match)\D*
- zero or more non-digit chars\d
- a digit\w*
- 0 or more word chars\W
- a non-word char.*
- any zero or more chars other than line break chars as many as possible.matches
requires a full string match).In regular expressions, the Kleene star *
means "zero or more matches of the preceding character (class) or group". But in your case, there is nothing preceding, the star is the first character in your regex string. That's what the error indicates.
If you actually want to match an asterisk you have to escape it with backslashs:
"\\*\\d+.*\\W+.*"