我需要一个java正则表达式模式来验证输入字符串:输入可以包含3个或更多的字母,后跟7个或更多的数字。字符的总和应在10到14之间。
我写了一个模式,并测试工作,我意识到这与2节:1个正向先行,检查字符格式(3个或更多字母后跟7个或更多数字)2个正向先行,检查输入字符串的字符长度(以质量为单位)
我的图案:(?=^[A-Z]{3,}[0-9]{7,}$)(?=^[A-Z0-9]{10,14}$)
当我在java8中使用Matcher.matches()
时,它不匹配,而如果我使用matcher.find()
,它会给我true。
我尝试了这个模式:(?=^[A-Z]{3,}[0-9]{7,}$)(?=^[A-Z0-9]{10,14}$)
与Matcher.matches()
,并期望给予我真,但给我假。
如果我用matcher.find()
尝试这个模式,它给我true,但我也有其他模式在使用,并且没有开始和结束符号,所以find()函数为该模式提供true(给出错误的结果),如果输入字符串也包含其他字符(所以我不会使用find,因为其他模式,如果不必要)。
输入应该起作用:ROM1234567 ROMM1234567
输入不应工作:RO1234567 RO123456 ROM123456 ROM123456789012
2条答案
按热度按时间2cmtqfgy1#
Matcher.matches()
检查完整字符串是否与提供的模式匹配。但是你的模式doesn't actually matches anything:lookaheads(和一般的lookarounds)不消耗输入。您可以使用实际匹配字符串的模式。像这样:
或
第一个例子here的演示。请注意,它是如何匹配整行的,而不是像您的尝试那样在开始时匹配空字符串。
或者使用
matcher.find()
,因为它会查找子字符串,并且非常喜欢匹配输入开头的空字符串的模式。wkftcu5l2#
你晚上试着用正则表达式:
^
-匹配字符串的开头。(?.{10,14}$)
-字符串包含10到14个非换行字符的肯定前瞻Assert。[A-Z]{3,}[0-9]{7,}
-匹配3个或更多字母,后跟7个或更多数字。\Z
-匹配字符串的结尾。请注意,在我使用了
\Z
而不是$
,它也会匹配字符串末尾的换行符,这可能是你不希望作为输入的一部分。也就是说,输入应该只由字母数字字符组成。如果您知道不能输入换行符,或者可以在行尾输入换行符,则使用$
。