Java Regex - 字母数字,允许前导空格而不是空白字符串

时间:2013-06-13 23:39:22

标签: java regex string

我一直在尝试制作一个只允许使用字母数字字符的java正则表达式,它可以有空格,但整个字符串不能为空......

几个例子..

" hello world123" //fine
"hello123world" //fine
"hello123world " //fine
"    " //not allowed

到目前为止,我已经得到了     的 ^ [A-ZA-Z0-9] [A-ZA-Z0-9 \ S] * $ 虽然这不允许任何前导空格,因此任何带有x前导空格的字符串都不匹配。

我可以添加到表达式以允许引导空格的任何想法吗?

3 个答案:

答案 0 :(得分:7)

^\s*[\da-zA-Z][\da-zA-Z\s]*$怎么样?开始时有0个或更多空格,后跟至少1位数字或字母后跟数字/字母/空格。

注意:我没有使用\ w,因为\ w包含“_”,这不是字母数字。

编辑:刚刚在regexpal上测试了所有案例,并且都按预期工作。这个正则表达式似乎是最简单的。

答案 1 :(得分:2)

只需使用预测断言至少有一个非空白:

(?=.*[^ ])[a-zA-Z0-9 ]+

这可以与String.matches()一起使用:

if (input.matches("(?=.*[^ ])[a-zA-Z0-9 ]+")) {
    // input is OK
}

答案 2 :(得分:1)

您可以使用look-ahead机制^(?=\\s*[a-zA-Z0-9])[a-zA-Z0-9\s]*$

对其进行测试

^(?=\\s*[a-zA-Z0-9])将使正则表达式检查字符串的开头是否包含更多空格\\s*,然后是[a-zA-Z0-9]类中的字符。

演示:

String[] data = { 
        " hello world123", //fine
        "hello123world", //fine
        "hello123world ", //fine
        "    " //not allowed
         };

for(String s:data){
    System.out.println(s.matches("(?=.*\\S)[a-zA-Z0-9\\s]*"));
}

输出

true
true
true
false