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).