Есть ли лучший способ обезопасить гиперссылки из текстового ввода? - PullRequest
1 голос
/ 19 января 2012

Я пытаюсь удалить любые гиперссылки из данного текста и перезаписать любые фрагменты, которые кажутся гиперссылками, заменив их текстом [LINK REMOVED FROM EVIDENCE AT REQUEST OF TRIAL JUDGE]

public String overwriteLinks(String text){
    final String OVERWRITE_WITH = "[LINK REMOVED FROM EVIDENCE AT REQUEST OF TRIAL JUDGE]";

    List<String> checkForPatterns = Arrays.asList(
        "http://", "www", ".com", ".net", 
        ".org", "dot com", "dot net");

    StringBuilder re = new StringBuilder();
    for (String checkForPattern : checkForPatterns){
        if (re.length() > 0)
            re.append("|");
        String quotedSite = Pattern.quote(checkForPattern);
        re.append(quotedSite);
    }

    Pattern p = Pattern.compile(re.toString(),Pattern.CASE_INSENSITIVE);
    text = p.matcher(text).replaceAll(OVERWRITE_WITH);

    return text;
}

Есть ли лучший способ сделать это, чтобы максимизировать количество удаленных ссылок? Мои навыки регулярных выражений в лучшем случае сомнительны.

Ответы [ 2 ]

1 голос
/ 19 января 2012

Попробуйте использовать это регулярное выражение:

public static final URI_REGEX = Pattern.compile( "^(([^:/?#]+):)?(//([^/?#]*))?([^?#]*)(\\?([^#]*))?(#(.*))?" );

Кажется, я помню, как импортировал / создал его в нашей кодовой базе из URI RFC много лет назад.Это должно соответствовать всем URI в вашей строке и обеспечить легкую замену.

0 голосов
/ 19 января 2012

Вы можете создать класс, следуя примеру, приведенному Ларсом Фогелем в его Java Regex Tutorial («6.4. Создание средства проверки ссылок»), а затем дополнить его методом замены любой из найденных ссылок. с вашей строкой OVERWRITE_WITH.

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

...