Invalid regular expression : Dangling meta character “*”

后端 未结 2 1467
猫巷女王i
猫巷女王i 2021-01-25 10:07

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

2条回答
  •  失恋的感觉
    2021-01-25 10:47

    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

    • start of string (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.
    • end of string (matches requires a full string match).

提交回复
热议问题