我想做的事情:这个正则表达式必须强制第一个字符成为一个字母,然后才能插入字符,字母,空格或“ - ”。
这第一部分很好用:(^[A-Za-z][A-Za-z -]*$)
然后我想允许一个空字符串:(^$)
然而,当我将两者组合时,用户可以用空格开始字符串。我在这做错了什么? 感谢名单!
(^[A-Za-z][A-Za-z -]*$)||(^$)
(我不知道是否需要此信息,但我在Java中使用它,作为从InputVerifier扩展的类的一部分,在JTextFields上设置验证器)
答案 0 :(得分:4)
这个应该符合您的需求:
^([A-Za-z][A-Za-z -]*|)$
正则表达式中的OR
只需要一个|
,而经典的JAVA(其他语言)需要两个||
。
答案 1 :(得分:3)
以下应该这样做:
^([A-Za-z][A-Za-z -]*)?$
?
使括号内的表达式可选。
原始正则表达式不正确的原因是||
。正则表达式“或”运算符是单个|
。现在考虑x||y
。这与x
或匹配空字符串或 y
。由于空字符串没有以任何方式锚定,Pattern.find()
将在任何输入中找到它的至少一个实例。