1

我正在尝试做的事情:这个正则表达式应该强制第一个字符是一个字母,在那个字符之后,可以插入字母、空格或“-”。

第一部分工作得很好:(^[A-Za-z][A-Za-z -]*$)

然后我也想允许一个空字符串:(^$)

然而,当我将两者结合起来时,用户可以用空格开始字符串。我在这里做错了什么?谢谢!

(^[A-Za-z][A-Za-z -]*$)||(^$)

(我不知道是否需要此信息,但我在 Java 中使用此信息,作为从 InputVerifier 扩展的类的一部分,以在 JTextFields 上设置验证器)

4

2 回答 2

4

这应该适合您的需求:

^([A-Za-z][A-Za-z -]*|)$

in正OR则表达式只需要一个|,而经典的 JAVA one(在其他语言中)需要两个||

于 2012-12-18T09:40:36.590 回答
3

以下应该做到这一点:

^([A-Za-z][A-Za-z -]*)?$

使?括号内的表达式可选。

您的原始正则表达式不太正确的原因是||. 正则表达式“或”运算符是单个|. 现在考虑x||y。这匹配x 一个空字符串 y。由于空字符串没有以任何方式锚定,因此将在任何输入Pattern.find()中找到它的至少一个实例。

于 2012-12-18T09:42:30.647 回答