Как проверить URL/имя сайта в EditText на Android?

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

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

Ответ 1

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

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

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

Он вернет True, если URL-адрес действителен и false, если URL-адрес недействителен.

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

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

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

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

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

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

НЕ ИСПОЛЬЗУЙТЕ URLUtil, чтобы проверить URL-адрес, как показано ниже.

 URLUtil.isValidUrl(url)

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

Ответ 2

/** 
* 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();
}

Ответ 3

URLUtil.isValidUrl будет работать, поскольку он существует с уровня api.

Ответ 4

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

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;

}

Ответ 5

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

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

Я не говорю, что Patterns.WEB_URL плохо, просто он делает легко проверить, что соответствует, а что нет.