java正则表达式只接受字母表和空格,不允许在字符串的开头和结尾使用空格
我对验证输入字段有以下要求:
- 它应该只包含字母和字母之间的空格李>
- 它不能在字符串的开头或结尾包含空格李>
- 它不能包含任何其他特殊字符李>
为此,我使用以下正则表达式:
^(?!\s*$)[-a-zA-Z ]*$
但这在一开始是允许空间的。感谢您的帮助
你可以在下面搜索框中键入要查询的问题!
我对验证输入字段有以下要求:
为此,我使用以下正则表达式:
^(?!\s*$)[-a-zA-Z ]*$
但这在一开始是允许空间的。感谢您的帮助
# 1 楼答案
我想问题是有一个?在否定空格之前,这意味着它是可选的
这应该是有效的:
至少有一个字母序列,然后是带空格的可选字符串,但始终以字母结尾
# 2 楼答案
对我来说,唯一合乎逻辑的方法是:
字符串的开头必须至少有一个字母。(我用字母
\p{L}
的Unicode代码属性替换了[a-zA-Z]
)。然后可以有一个空格后跟至少一个字母,这部分可以重复\p{L}
:任何语言的任何种类的信件。见regular-expressions.info表达式
^(?!\s*$)
中的问题是,如果在字符串末尾只有空格,则前瞻将失败。如果不允许前导空格,只需删除lookahead==>;中的字符串结尾锚定符即可^(?!\s)[-a-zA-Z ]*$
。但这仍然允许字符串以空格结尾。要避免这种情况,请回顾字符串^(?!\s)[-a-zA-Z ]*(?<!\s)$
的末尾。但我认为这项任务不需要四处看看# 3 楼答案
如果将其与
String.matches
方法一起使用,则应该可以使用。我猜你想要英文字母表注意
\s
将允许所有类型的空白字符。在Java中,它相当于其中包括水平制表符(09)、换行符(10)、回车符(13)、换行符(12)、退格符(08)、空格符(32)
如果您希望只允许空间(32):
您可以通过使捕获组
( +[a-zA-Z]+)
不捕获(使用String.matches
您将无法单独获取单词)来进一步优化上面的正则表达式。也可以更改量词,使其具有所有格,因为这里没有回溯的意义# 4 楼答案
我不知道你接受的字符串中的单词是否可以用多个空格分隔。如果可以:
如果不能:
字符串必须以字母(或几个字母)开头,而不是空格
字符串可以包含几个单词,但第一个旁边的每个单词前面都必须有空格
希望我能帮忙
# 5 楼答案
试试这个:
此表达式使用negative lookahead and negative lookbehind禁止在字符串的开头或结尾使用空格,并要求匹配整个字符串