Как бы я использовал регулярное выражение, чтобы разрешить определенные символы? - PullRequest
1 голос
/ 07 марта 2012

В основном я использую регулярное выражение, и то, что делает мой код, по сути, отправляет код возврата клиента, если он не содержит символов в регулярном выражении. Моя проблема в том, что я не знаю, как разрешить пробелы. В настоящее время это мой код, я хотел бы разрешить пробел, 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 ]

2 голосов
/ 07 марта 2012

Я совершенно уверен, что вы хотите быть совместимым с Юникодом, поэтому вы должны использовать

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

Я создал два класса символов, чтобы он не начинался с пробела, если эта проверка не нужна,просто удалите первый класс и измените квантификатор второго на +.

From регулярные-выражения.info

\ p {Nd}или \ p {Decimal_Digit_Number}: цифры от нуля до девяти в любом сценарии, кроме идеографических.

\ p {L} или \ p {Letter}: буквы любого типа из любого языка.

Подробнее о Unicode в Java

2 голосов
/ 07 марта 2012

используйте метасеквиду \ w (слова, буквы, подчеркивания), плюс пробел (или \ s для сопоставления с табуляцией) в классе символов:

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

edit : похоже, это работает только для одного интервала, хотя длина не проверяется:

var pattern = @"^(\w+\s?)+$";
2 голосов
/ 07 марта 2012

Регулярное выражение, которое вы ищете - [a-zA-Z_0-9][a-zA-Z_0-9 ]*, если вы не хотите, чтобы имя начиналось с пробелов.

1 голос
/ 07 марта 2012

Попробуйте это

if (username.length() < 1 || username.length() >= 13
    || !username.matches("[a-zA-Z0-9 ]+"))
    {
        session.getLoginPackets().sendClientPacket(3);
        return;
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...