Java风格的正则表达式:如果组是n个字符,则匹配整个字符串

时间:2015-10-14 14:55:15

标签: java regex

我正在尝试为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   

2 个答案:

答案 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}$

RegEx Demo

  • ^[a-zA-Z0-9]在开始时匹配alpha-num char
  • (?!.* [a-zA-Z0-9])是负面预测,以确保没有alpha-num字符后跟空格的实例。
  • [a-zA-Z0-9 ]{7}$匹配包含alpha-num char或space的7个字符。