我有一个文本字段,用户可以在其中输入组织的星级评分到数据库中,其中列的最大长度为5.
我尝试使用".*\\*{1,5}$"
来匹配字符串,但是当我输入6个字符时,它似乎无法正常工作。
从数据库中抛出的错误消息是:
我希望在触发错误消息之前捕获输入。
答案 0 :(得分:7)
我尝试过使用
".*\\*{1,5}$"
说“匹配任意数字的任何字符(可能不包括换行符,取决于你使用的标志),后跟1-5个星号,在字符串的末尾,”不是“匹配1-5个星号。”当您使用六个星号对其进行测试时,它会传递字符串,因为它将前五个星号与.*
匹配(因为它是贪婪的),然后在末尾添加一个带有\*{1,5}
的星号。
仅匹配1-5个星号而不是其他:^\*{1,5}$
(作为字符串文字:"^\\*{1,5}$"
)。 ^
是“输入的开始”锚点,\*
(字符串文字中的\\*
)是转义星号(因为它具有特殊含义),{1,5}
表示“至少一次,最多五次”,$
是“输入结束”锚。更多信息the documentation for Pattern
。