2011-04-08 144 views
7

嘿所有,所以我试图允许一些文本输入在发送之前通过正则表达式检查。我希望文本只包含A-Z,0-9和空格“”字符。这里是我的代码现在:正则表达式允许在Java中使用空格字符

if(!title.matches("[a-zA-Z0-9_]+") { 
    //fail 
} 
else { 
    //success 
} 

然而,这仍然给了//fail结果当我输入类似“这是一个测试”

任何想法?谢谢大家。

回答

19

你不包括正则表达式中的空间。请尝试以下操作:

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

啊......我以为_表示一个“”。所以简单的'[a-zA-Z0-9] +'应该可以工作吗? – JMRboosties 2011-04-08 23:35:30

+0

是的。 '_'是字面下划线。这看起来像你不想要的。我更新了我的例子。 – 2011-04-08 23:41:13

+1

完美。非常感谢你。 – JMRboosties 2011-04-08 23:44:37

3

\s允许任何ASCII空白字符。考虑使用它而不是“”。

if(!title.matches("[a-zA-Z0-9_\s]+")) { 
    //fail 
} 
else { 
    //success 
} 
+3

不,'\ s'只适用于7位数据。它不适用于Java的本地字符集。 – tchrist 2011-04-08 23:33:28

+0

这是我的新闻!我想我应该更加小心一点。 – 2011-04-08 23:38:01

+1

这是标准Java正则表达式库的问题。它不适用于Java自己的字符集!你必须将JNI交给ICU才能获得任何可以正常工作的东西 - 我的意思是,作为最低标准,它符合基本Unicode功能的级别1要求,这些要求已经详细说明[UTS#18 Unicode Regular Expressions](http:///unicode.org/reports/tr18/)。 Java不能满足其中大多数,更不用说二级或三级土地上的任何其他东西了。这就是Google为什么要为Android安装JNI-ICU的原因。他们需要Unicode支持。 – tchrist 2011-04-08 23:51:30

相关问题