如何在正则表达式中允许一个空格A-Z,a-z,0-9?

时间:2012-03-07 21:29:10

标签: java regex

主要是我正在使用正则表达式,我的代码本质上是什么,如果它不包含正则表达式中的字符,则发送客户端返回代码。我的问题是,我不知道如何允许空格。 目前这是我的代码,我想允许空格,a-z,A-Z和0-9。

if (username.length() < 1 || username.length() >= 13
    || !username.matches("[a-zA-Z_0-9]"))
{
    session.getLoginPackets().sendClientPacket(3);
    return;
}

5 个答案:

答案 0 :(得分:1)

这取决于您正在使用的特定正则表达式类,以及魔术序列是什么,但通常是\ s,或:space:将起作用。对于某些语言,正则表达式中的空格不被忽略,您可以直接放入空格:[a-zA-Z_0-9]也可以。

答案 1 :(得分:1)

缺少的最重要的是重复正则表达式。例如:

if (username.length() < 1 || username.length() >= 13 || !username.matches("^[a-zA-Z_0-9 ]+$")) {
    session.getLoginPackets().sendClientPacket(3);
    return;
}

空格字符必须出现在字符集的 end (我认为这主要是你所要求的)。其他符号: *'^'是'整个字符串的开头' *'$'是'字符串的结尾'(除非有换行符......) *'+'是'[...]字符集中的内容,至少一次'

所以,在[]的末尾添加空格并在结尾处使用“+”,你应该拥有它。

值得注意的是你可以在正则表达式中做所有事情,例如:

if (!username.matches("^[a-zA-Z0-9_ ]{1,13}$") {
    session.getLoginPackets().sendClientPacket(3);
    return;
}
{p> {1,13}是一个边界,说“至少一次,最多13次”(包括在内)

我还应该指出,我相信java支持一些快捷方式,例如对于任何高位或低位字母:[A-z0-9_]

- 修改

经过几次评论后再说:'单一空间',我不得不承认我仍然没有按照这种方式阅读要求。

如果技巧'只允许一个空格',这应该有效:

if (username.length() < 1 || username.length() >= 13 || !username.matches("^[A-z0-9_]*\\s[A-z0-9_]*$")) {
    session.getLoginPackets().sendClientPacket(3);
    return;
}

基本上,您最初保留大小边界,然后确保它由字母,数字和下划线组成,只有一个空格。

答案 2 :(得分:0)

试试这个:[a-zA-Z_0-9]*( )?[a-zA-Z_0-9]*

这允许字符a-z,A-Z,_,0-9的每个组合中只有一个或没有空格。

答案 3 :(得分:0)

尝试

!username.matches("[a-zA-Z_0-9 ]")) 

OR

!username.matches("[a-zA-Z_0-9\s]"))

原因更好是因为它包含所有空格字符:例如翼片

答案 4 :(得分:0)

试试这个

^[a-zA-Z_0-9]+(?: [a-zA-Z_0-9]+)?$

字符串以至少一个字母数字开头,然后可选一个空格和一个或多个字母数字字符,直到字符串为止。

here on Regexr

由于[a-zA-Z_0-9]等同于\w,您可以将其简化为

^\w+(?: \w+)?$

如果您想要符合Unicode,则应使用Pattern.UNICODE_CHARACTER_CLASS see here for more details选项:

  

启用Unicode版本的预定义字符类和POSIX字符类。

表示\w匹配具有字母和数字属性的所有Unicode代码点。