0
public static boolean validateState (String state)
{
return state.matches( "[1-9]\\d{2}-[1-9]\\d{4}" ) ;
}

为什么当我将 2 和 4 放在括号中时,此函数在连字符前取 3 位,在连字符后取 5 位?请帮助..

4

2 回答 2

3

在这两种情况下都删除[1-9]。您实际上是在尝试匹配:

  • 一个数字 (1-9),后跟
  • 两位数,后跟
  • 一个连字符,后跟
  • 一个数字 (1-9),后跟
  • 四位数

或者更简洁地说:[0-9]等价于\\d.

您可能需要[1-9]\\d-[1-9]\\d{3}或只是\\d{2}-\\d{4}.

于 2014-07-15T13:51:55.250 回答
1

对于您提供的正则表达式“[1-9]\d{2}-[1-9]\d{4}”


a) [1-9] 接受一个数字
b) d{2} 接受两个数字

所以,它总共接受 3 个数字(在连字符之前,即“[1-9]\d{2}”部分)。

同样,在连字符之后它也将接受 4 位数字。

您可能想要使用以下任何一种:
1) \d{2}-\d{4}
2) [1-9]\d{1}-[1-9]\d{3}

于 2014-07-15T13:56:35.070 回答