如何在Java Regex中限制多个空格?

时间:2016-05-04 13:05:33

标签: java regex

要为JavaFX文本字段开发验证,其中允许使用单个空格但不允许使用多个空格。

  

例如," Apple Juice" - 纠正" Apple Juice" - 不正确   应该受到限制

if (title.matches("[a-zA-Z0-9 ]+"))

找到了几个链接,但没有满足我的要求。我认为这更符合逻辑。

Whitespace Matching Regex - Java

Regex allowing a space character in Java

3 个答案:

答案 0 :(得分:2)

你可以这样做:

if (title.matches([a-zA-z]+[ ][a-zA-Z]+))
  • 第一个[a-zA-z]+检查空格前的任何字符。
  • [ ]只检查一个空格。
  • 第二个[a-zA-z]+检查空格后的任何字符。

<小时/> 注意:仅当字符串之间存在空格时才会匹配。如果您想匹配Abcd<space><space>Abcd等字符串,(我使用<spcace>,因为SO不允许同时存在两个空格),那么您可以替换+ s与* s。,即

if (title.matches([a-zA-z]*[ ][a-zA-Z]*))

答案 1 :(得分:1)

你可以做到

if ("Apple Juice".matches("\\w+ \\w+")) {
 .......

答案 2 :(得分:1)

你最好找到一个以上的空格并否定结果:

2016.05.04 10:06:20 org.apache.mina.filter.ssl.SslHandler - Unexpected exception from SSLEngine.closeInbound(). 
javax.net.ssl.SSLException: Inbound closed before receiving peer's close_notify: possible truncation attack? 
at sun.security.ssl.Alerts.getSSLException(Alerts.java:208) 
at sun.security.ssl.SSLEngineImpl.fatal(SSLEngineImpl.java:1639) 
at sun.security.ssl.SSLEngineImpl.fatal(SSLEngineImpl.java:1607) 
at sun.security.ssl.SSLEngineImpl.closeInbound(SSLEngineImpl.java:1537) 
at org.apache.mina.filter.ssl.SslHandler.destroy(SslHandler.java:204) 
at org.apache.mina.filter.ssl.SslFilter.sessionClosed(SslFilter.java:439) 
at org.apache.mina.core.filterchain.DefaultIoFilterChain.callNextSessionClosed(DefaultIoFilterChain.java:382) 
at org.apache.mina.core.filterchain.DefaultIoFilterChain.access$900(DefaultIoFilterChain.java:47) 
at org.apache.mina.core.filterchain.DefaultIoFilterChain$EntryImpl$1.sessionClosed(DefaultIoFilterChain.java:750) 
at org.apache.mina.core.filterchain.IoFilterAdapter.sessionClosed(IoFilterAdapter.java:88) 
at org.apache.mina.core.filterchain.DefaultIoFilterChain.callNextSessionClosed(DefaultIoFilterChain.java:382) 
at org.apache.mina.core.filterchain.DefaultIoFilterChain.fireSessionClosed(DefaultIoFilterChain.java:375) 
at org.apache.mina.core.service.IoServiceListenerSupport.fireSessionDestroyed(IoServiceListenerSupport.java:244) 
at org.apache.mina.core.polling.AbstractPollingIoProcessor.removeNow(AbstractPollingIoProcessor.java:600) 
at org.apache.mina.core.polling.AbstractPollingIoProcessor.removeSessions(AbstractPollingIoProcessor.java:560) 
at org.apache.mina.core.polling.AbstractPollingIoProcessor.access$800(AbstractPollingIoProcessor.java:67) 
at org.apache.mina.core.polling.AbstractPollingIoProcessor$Processor.run(AbstractPollingIoProcessor.java:1132) 
at org.apache.mina.util.NamePreservingRunnable.run(NamePreservingRunnable.java:64) 
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145) 
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615) 
at java.lang.Thread.run(Thread.java:745) 
2016.05.04 10:06:20 org.apache.mina.core.filterchain.IoFilterEvent - Event EXCEPTION_CAUGHT has been fired for session 220 
2016.05.04 10:06:20 org.apache.mina.filter.executor.OrderedThreadPoolExecutor - Adding event SESSION_CLOSED to session 220 
Queue : [MESSAGE_SENT, , SESSION_CLOSED, ] 

,请参阅java.util.regex.Pattern javadoc以获取语法。首先修剪字符串,因此您无需检查非空白字符。如果不进行trim()操作,也会考虑前导和尾随空格。