Java 对于全名,正则表达式未按预期工作
我有一个文本框,在这里我把输入作为全名 当用户以Java 对于全名,正则表达式未按预期工作,java,regex,Java,Regex,我有一个文本框,在这里我把输入作为全名 当用户以My Name的形式输入输入时,我没有收到任何错误。然而,当用户以的形式输入输入时,我的名字是,我得到了一个错误 我的正则表达式是 ([a-zA-Z]+|[a-zA-Z]+\\s[a-zA-Z]+) 实际需要的是,文本应该具有 only (a-z OR A-Z) AND white space... 演示输入是 我的名字是XYZ PQR STU 我叫XYZ XYZ PQR STU 如何使用regex实现这一点 更新1 我正在使用 Pat
My Name
的形式输入输入时,我没有收到任何错误。然而,当用户以的形式输入输入时,我的名字是
,我得到了一个错误
我的正则表达式是
([a-zA-Z]+|[a-zA-Z]+\\s[a-zA-Z]+)
实际需要的是,文本应该具有
only (a-z OR A-Z) AND white space...
演示输入是
Pattern p = Pattern.compile("[a-zA-Z\\s]");
Matcher m = p.matcher("DummyName");
boolean matchFound = m.matches();
我仍然得到了
matchFound
,因为FALSE\s
代表空白。如果希望在字符类中允许空白以及大小写字母,可以使用[a-zA-Z\s]
\s
表示空白。如果您想在字符类中允许空白以及大小写字母,您可以使用[a-zA-Z\s]
试试这个^[a-zA-Z]+(?:\s+[a-zA-Z]+)*$
。你可以根据自己的口味调整一下。?:
用于确保组不会捕获-如果您只是测试完整字符串,则不需要捕获^
和$
将匹配输入文本的开头和结尾-对于匹配()
来说不是直接需要的,但这是一种很好的保护措施。试试这个^[a-zA-Z]+(?:\s+[a-zA-Z]+)*$
。你可以根据自己的口味调整一下。?:
用于确保组不会捕获-如果您只是测试完整字符串,则不需要捕获^
和$
将匹配输入文本的开头和结尾-这不是匹配()所直接要求的,但它是一种很好的保护措施。我认为您应该把问题说得更清楚一点,现在您是说只有空格才可以作为名称?可能会显示一些可接受的输入?@owlstead:Updated question…如果您使用Eclipse,您可以尝试使用QuickREx插件进行一些实时测试。我认为您应该让您的问题更清楚一点,现在您是说名称只能使用空格?可能会显示一些可接受的输入?@owlstead:Updated question…如果您使用Eclipse,您可以尝试QuickREx插件进行一些实时测试。在您的更新中,您的模式只匹配1个字符。如果希望在一个组中找到全名,请尝试匹配([a-zA-Z\s]+)
。或者([a-zA-Z\s]+?)+
如果您需要多个组。我已经更新了我的问题。。查看可能的输入。。。我应该用什么?好吧,这真的取决于你,但是如果我正确地收集到你的意图,我猜你想要([a-zA-Z\s]+)
。这将接受任何非空的大写字母、小写字母和空格。我想你不需要“+”后面的“?”。@owlstead是的。。。你完全正确。我只是匆忙地把更复杂的一个扔了下来。我认为[a-zA-Z\s]+
是他真正想要的。在您的更新中,您的模式只匹配1个字符。如果希望在一个组中找到全名,请尝试匹配([a-zA-Z\s]+)
。或者([a-zA-Z\s]+?)+
如果您需要多个组。我已经更新了我的问题。。查看可能的输入。。。我应该用什么?好吧,这真的取决于你,但是如果我正确地收集到你的意图,我猜你想要([a-zA-Z\s]+)
。这将接受任何非空的大写字母、小写字母和空格。我想你不需要“+”后面的“?”。@owlstead是的。。。你完全正确。我只是匆忙地把更复杂的一个扔了下来。我认为[a-zA-Z\s]+
才是他真正想要的。