Java中允许空格字符的正则表达式

11

大家好,我正在尝试允许文本输入并在发送之前进行正则表达式检查。我希望文本只包含A-Z、0-9和空格" "字符。这是我的代码:

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

然而,当我输入"这是一个测试"等内容时,仍会得到//fail的结果。

有什么想法吗?谢谢大家。

2个回答

32

你的正则表达式中没有包含空格。尝试使用以下内容:

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

啊...我以为下划线 _ 代表空格。那么简单地使用 [a-zA-Z0-9 ]+ 就可以了吗? - JMRboosties
是的。_ 是下划线符号。但看起来你不需要它。我已经更新了我的示例。 - Jason McCreary

2

\s可以匹配任何ASCII空白字符。建议使用它,而不是使用空格。

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

4
不,\s仅适用于7位数据。它不能在Java的本地字符集上工作。 - tchrist
这对我来说是个新闻!我想我应该再小心一点。 - Scott Nguyen
1
这就是标准Java正则表达式库的问题所在。它不能与Java自己的字符集一起使用!你必须JNI到ICU才能得到任何正常工作的东西——我指的是至少符合基本Unicode功能的Level 1要求,这些要求在UTS#18 Unicode Regular Expressions中有详细说明。Java大多数情况下都无法满足这些要求,更不用说在Level 2或Level 3领域中进一步提升了。这就是为什么Google会为Android执行JNI-to-ICU操作。他们需要Unicode支持。 - tchrist
我认为 \\s 可以代替 \s - Phil Freihofner

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接