Как проверить 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]+)?|(?:www.|[-;:&=\+\$,\w][email protected])[A-Za-z0-9.-]+)((?:\/[\+~%\/.\w-_]*)?\??(?:[-\+=&;%@.\w_]*)#?(?:[\w]*))?)");
Я не говорю, что Patterns.WEB_URL
плохо, просто он делает легко проверить, что соответствует, а что нет.