Regexp для строки, содержащей только буквы, цифры и пробел в Java - PullRequest
3 голосов
/ 14 февраля 2011

Требование: строка должна содержать только буквы, цифры и пробел.
Я должен передать чистое имя другому API.

Реализация: Java

Я придумал это для моего требования

public static String getCleanFilename(String filename) {
    if (filename == null) {
        return null;
    }
    return filename.replaceAll("[^A-Za-z0-9 ]","");
}

Это хорошо работает для некоторых из моих тестовых примеров, но я хочу знать, что я пропускаю какие-либо граничные условия или есть какой-то лучший способ (по производительности) сделать это.

Ответы [ 2 ]

2 голосов
/ 14 февраля 2011

Дополнительно к комментариям: я не думаю, что производительность является проблемой в сценарии, где вводится пользовательский ввод (а имя файла не должно быть таким длинным ...).

Но по вашему вопросу: вы можете уменьшить количество замен, добавив дополнительный + в свое регулярное выражение:

[^A-Za-z0-9 ]+

1 голос
/ 14 февраля 2011

Чтобы ответить на ваш прямой вопрос, \t терпит неудачу в вашем методе и проходит как "пробел".Переключитесь на \s ([...\s], и все хорошо.

В любом случае, ваш дизайн, вероятно, имеет недостатки. Вместо того, чтобы произвольно диктовать ввод пользователя, дайте пользователю знать, что вы не разрешаете, исделайте руководство по исправлению.

РЕДАКТИРОВАТЬ:
Если имя файла не имеет значения, возьмите хэш SHA-2 имени файла и используйте его. Гарантированно соответствует вашим требованиям.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...