Самая большая пропущенная вещь - это повторение регулярного выражения.Например:
if (username.length() < 1 || username.length() >= 13 || !username.matches("^[a-zA-Z_0-9 ]+$")) {
session.getLoginPackets().sendClientPacket(3);
return;
}
Пробел должен начинаться с конца набора символов (который, я думаю, в основном соответствует тому, что вы спрашивали).Другие символы: * '^' это 'начало всей строки' * '$' это 'конец строки' (если нет перевода строки ...) * '+' это 'то, что в [...] набор символов, хотя бы один раз '
Итак, добавьте пробел в конце [] и используйте' + 'в конце, и вы должны его получить.
Стоит отметитьвы можете делать все в пределах регулярного выражения, например:
if (!username.matches("^[a-zA-Z0-9_ ]{1,13}$") {
session.getLoginPackets().sendClientPacket(3);
return;
}
Граница {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;
}
По сути, вы изначально сохраняете границы размеров, а затем убедитесь, что они состоят из групп букв, цифр и подчеркивания, с одним пробелом.