我正在尝试为String验证器创建一个Regex。我的字符串长度必须正好为8个字符,并以字母(小写或大写)或数字开头。它只能在第一个字符后面包含字母(小写和大写),数字或空格。如果找到空格,则后面只能有空格。
目前,我有第二部分的匹配组:[a-zA-Z0-9]{1,}\s*
我找不到一种方法来指定该组只有恰好有8个字符时才匹配。我试过^([a-zA-Z0-9]{1,}\s*){8}$
,但这不是预期的结果。
以下是一些测试用例(带有尾随空格)。
有效:
9013
20130
89B
A5000000
无效:
9013
20130
90 90
123456789
答案 0 :(得分:5)
可能有一种智能的正则表达式方法,但您也可以先检查字符串的长度:
input.length() == 8 && input.matches("[a-zA-Z0-9]+\\s*")
这也可能比复杂的正则表达式更有效。
答案 1 :(得分:4)
您可以使用这个基于前瞻性的正则表达式:
^[a-zA-Z0-9](?!.* [a-zA-Z0-9])[a-zA-Z0-9 ]{7}$
^[a-zA-Z0-9]
在开始时匹配alpha-num char (?!.* [a-zA-Z0-9])
是负面预测,以确保没有alpha-num字符后跟空格的实例。[a-zA-Z0-9 ]{7}$
匹配包含alpha-num char或space的7个字符。