2012-03-07 107 views
1

主要是我正在使用正则表达式,而我的代码基本上做的是发送客户端返回码,如果它不包含正则表达式中的字符。我的问题是,我不知道如何允许空格。 目前这是我的代码,我想要有空间,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; 
} 

回答

2

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

+0

这样的作品,但仍允许多于一个空间:| – 2012-03-07 08:39:27

+0

按照您的文章“让空间” – 2012-03-07 17:28:39

1

试试这个

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

嗯似乎并没有工作 – 2012-03-07 08:39:33

2

使用\ W元序列(文字,字母,下划线),加上一个空格(或用\ s过于匹配的标签),在字符类:

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

编辑:这似乎只能单倍行距工作,虽然不验证长度:

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

'\ s'为空格字符,而不是只是一个空间,它也包含了一些标签和换行符。 – stema 2012-03-07 06:17:51

+0

更改为只接受空间.... – sweaver2112 2012-03-07 06:19:37

+0

我正在使用java。 – 2012-03-07 08:39:59

2

我敢肯定你想成为支持Unicode标准,所以你应该使用

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

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

regular-expressions.info

\ p {}钕或\ p {} DECIMAL_DIGIT_NUMBER:除了表意文字任何脚本的一个数字0到9。

\ p {L}和\ p {}信:任何类型的任何语言字母。

More about Unicode in Java

相关问题