2012-03-07 106 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

相關問題