입력, URL 또는 웹 사이트 이름 (예 : www.google.com ) EditText
을 Android에서 가져오고 사용자가를 클릭 Button
하여 제출하거나 EditText
초점이 맞지 않으면 URL이 “형식으로 확인되어야합니다.” www.anyURL.com “…
어떻게 할 수 있습니까? Android에서 사용할 수있는 내장 기능이 있습니까?
답변
짧은 답변
패턴 클래스에서 WEB_URL 패턴 사용
Patterns.WEB_URL.matcher(potentialUrl).matches()
그것은 반환 URL이 유효한 경우는 true를 하고 URL이 유효하지 않은 경우는 false .
긴 대답
Android API 레벨 8 부터 WEB_URL 패턴이 있습니다. 출처를 인용하면 “RFC 3987의 대부분과 일치”합니다. 더 낮은 API 레벨을 대상으로하는 경우 소스에서 패턴을 복사하여 애플리케이션에 포함하기 만하면됩니다. 패턴과 매처를 사용하는 방법을 알고 있다고 가정하므로 여기서 더 자세히 설명하지 않겠습니다.
또한 URLUtil 클래스 는 다음과 같은 몇 가지 유용한 메소드를 제공합니다.
방법에 대한 설명은 그다지 정교하지 않으므로 소스를보고 어떤 방법이 자신의 목적에 가장 적합한 지 알아내는 것이 가장 좋습니다.
유효성 검사를 트리거하는 경우에는 여러 가지 가능성이 있습니다. EditText 콜백 함수를 사용할 수 있습니다.
또는 TextWatcher를 사용하십시오 .
아래와 같이 URL을 확인하기 위해 URLUtil 을 사용하지 마십시오 .
URLUtil.isValidUrl(url)
사실이 아닌 유효한 URL로 “http : //”와 같은 문자열을 제공하기 때문입니다.
답변
/**
* 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();
}
답변
경우에, 당신의 유닛 테스트에서, 당신이있어 NullPointerException
다음 사용하는 PatternsCompat
대신 Patterns
.
fun isFullPath(potentialUrl: String): Boolean {
return PatternsCompat.WEB_URL.matcher(potentialUrl.toLowerCase(Locale.CANADA)).matches()
}
또한 true
전달하면 이 메서드가 반환된다는 것을 깨달았 습니다 Photo.jpg
. 내 기대는 false
입니다. 따라서 위의 방법 대신 다음과 같은 방법을 제안합니다.
fun isFullPath(potentialUrl: String): Boolean {
try {
URL(potentialUrl).toURI()
return true
} catch (e: Exception) {
e.printStackTrace()
}
return false
}
답변
URLUtil.isValidUrl 은 API 레벨 1부터 존재하므로 작동합니다.
답변
웹 사이트 유효성 검사에이 정규식을 사용하세요.
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;
}
답변
아니면 그냥 좋은 옛날을 사용할 수 있습니다 Regex
Pattern urlRegex = Pattern.compile("((([A-Za-z]{3,9}:(?:\/\/)?)(?:[-;:&=\+\$,\w]+@)?[A-Za-z0-9.-]+(:[0-9]+)?|(?:www.|[-;:&=\+\$,\w]+@)[A-Za-z0-9.-]+)((?:\/[\+~%\/.\w-_]*)?\??(?:[-\+=&;%@.\w_]*)#?(?:[\w]*))?)");
나는 Patterns.WEB_URL
그것이 나쁘다고 말하는 것이 아니라 일치되는 것과 일치하지 않는 것을 쉽게 테스트 할 수 있도록합니다 .