正则表达式:将语句与空字符串结合使用

时间:2012-12-18 09:37:28

标签: java regex whitespace string

我想做的事情:这个正则表达式必须强制第一个字符成为一个字母,然后才能插入字符,字母,空格或“ - ”。

这第一部分很好用:(^[A-Za-z][A-Za-z -]*$)

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

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

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

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

2 个答案:

答案 0 :(得分:4)

这个应该符合您的需求:

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

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

答案 1 :(得分:3)

以下应该这样做:

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

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

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