我试图为字符串验证器创建一个正则表达式。我的字符串必须正好是8个字符长,并以字母(小写或大写)或数字开头。它只能包含字母(小写和大写)、数字或第一个字符后面的空白。如果发现了空格,则后面只能有空格
现在,我有第二部分的匹配组:[a-zA-Z0-9]{1,}s*
我找不到一种方法来指定只有当该组恰好有8个字符时才匹配该组。我尝试了^([a-zA-Z0-9]{1,}s*){8}$
,但这不是预期的结果。
下面是一些测试用例(后面有空格)。
有效:9013
20130
89B
A5000000
无效:9013
20130
90 90
123456789
可能有一种聪明的正则表达式方法可以做到这一点,但你也可以先检查字符串的长度:
input.length() == 8 && input.matches("[a-zA-Z0-9]+\s*")
这也可能比一个复杂的正则表达式更有效。
你可以使用这个基于前瞻的正则表达式:
^[a-zA-Z0-9](?!.* [a-zA-Z0-9])[a-zA-Z0-9 ]{7}$
RegEx演示
-
^[a-zA-Z0-9]
在开头匹配一个大写字符 -
(?!.* [a-zA-Z0-9])
是负向前看的,以确保没有后跟空格的字母num字符实例。 -
[a-zA-Z0-9 ]{7}$
匹配包含字母num字符或空格的7个字符。