我如何使用正则表达式来允许某些字符?

时间:2012-03-07 05:34:33

标签: 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;
}

4 个答案:

答案 0 :(得分:2)

您正在寻找的正则表达式是[a-zA-Z_0-9][a-zA-Z_0-9 ]*,假设您不希望名称以空格开头。

答案 1 :(得分:2)

在字符类中使用\ w元序列(单词,字母,下划线),以及一个空格(或者也可以匹配制表符):

var pattern = @"[\w ]{1,12}"; //c#, validates length also.

编辑:这似乎仅适用于单个间距,但不会验证长度:

var pattern = @"^(\w+\s?)+$";

答案 2 :(得分:2)

我很确定你想要符合Unicode,所以你应该使用

[\p{L}\p{Nd}][\p{L}\p{Nd} ]*

我创建了两个字符类以确保它不是以空格开头,如果不需要此检查,只需删除第一个类并将第二个类的量词更改为+

来自regular-expressions.info

  

\ p {Nd}或\ p {Decimal_Digit_Number}:除表意文字脚本外的任何脚本中的数字0到9。

     

\ p {L}或\ p {Letter}:任何语言的任何类型的信件。

More about Unicode in Java

答案 3 :(得分:1)

试试这个

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