Как проверить URL / имя веб-сайта в EditText в Android? - PullRequest
77 голосов
/ 11 апреля 2011

Я хочу получить ввод, URL-адрес или просто имя веб-сайта, например, www.google.com из EditText в Android и при нажатии на пользователя Button для отправки или когда EditText теряет фокус, URL должен быть проверен, как в формате " www.anyURL.com " ...

Как я могу это сделать? Есть ли встроенная функциональность в Android?

Ответы [ 5 ]

243 голосов
/ 09 мая 2011

Короткий ответ

Использовать шаблон WEB_URL в классе шаблонов

 Patterns.WEB_URL.matcher(potentialUrl).matches()

Будет возвращено Истина, если URL действителен и Ложь, если URL недействителен .

Длинный ответ

Начиная с уровня API Android 8 существует шаблон WEB_URL .Ссылаясь на источник, он «соответствует [большей части] RFC 3987».Если вы нацелены на более низкий уровень API, вы можете просто скопировать шаблон из источника и включить его в свое приложение.Я предполагаю, что вы знаете, как использовать шаблоны и сопоставления, поэтому здесь я не буду вдаваться в подробности.

Также класс URLUtil предоставляет несколько полезных методов, например:

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

Что касается того, когда запускать проверку проверки, существует несколько возможностей: вы можете использовать функции обратного вызова EditText

или используйте TextWatcher , которыйЯ думаю, что было бы лучше.

НЕ ИСПОЛЬЗУЙТЕ URLUtil для проверки URL, как показано ниже.

 URLUtil.isValidUrl(url)

, поскольку он дает такие строки, как"http://" как действительный URL, который не соответствует действительности

18 голосов
/ 22 января 2014
/** 
* This is used to check the given URL is valid or not.
* @param url
* @return true if url is valid, false otherwise.
*/
private boolean isValidUrl(String url) {
    Pattern p = Patterns.WEB_URL;
    Matcher m = p.matcher(url.toLowerCase());
    return m.matches();
}
1 голос
/ 13 октября 2011

URLUtil.isValidUrl будет работать, так как он существует начиная с уровня API 1.

0 голосов
/ 06 июля 2019

Используйте это регулярное выражение при проверке вашего сайта

String WebUrl = "^((ftp|http|https):\\/\\/)?(www.)?(?!.*(ftp|http|https|www.))[a-zA-Z0-9_-]+(\\.[a-zA-Z]+)+((\\/)[\\w#]+)*(\\/\\w+\\?[a-zA-Z0-9_]+=\\w+(&[a-zA-Z0-9_]+=\\w+)*)?$";


//TODO for website validation

private boolean isValidate() 
{

        String website = txtWebsite.getText().toString().trim();
        if (website.trim().length() > 0) {
            if (!website.matches(WebUrl)) {
                //validation msg
                return false;
            }
        }
        return true;

}
0 голосов
/ 15 июня 2016

Или вы могли бы просто использовать старый добрый Regex

Pattern urlRegex = Pattern.compile("((([A-Za-z]{3,9}:(?:\/\/)?)(?:[-;:&=\+\$,\w]+@)?[A-Za-z0-9.-]+(:[0-9]+)?|(?:ww‌​w.|[-;:&=\+\$,\w]+@)[A-Za-z0-9.-]+)((?:\/[\+~%\/.\w-_]*)?\??(?:[-\+=&;%@.\w_]*)#?‌​(?:[\w]*))?)");

Я не говорю, что Patterns.WEB_URL это плохо, это просто делает его простым для тестирования что соответствует, а что нет.

...