私は、入力、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パターンがあります。ソースを引用すると、「RFC3987のほとんどの部分と一致します」。より低いAPIレベルをターゲットにする場合は、ソースからパターンをコピーして、アプリケーションに含めることができます。パターンとマッチャーの使い方を知っていると思いますので、ここでは詳しく説明しません。
また、クラスURLUtilは、いくつかの便利なメソッドを提供します。
メソッドの説明はあまり複雑ではないため、ソースを調べて、どちらが目的に最も適しているかを判断するのがおそらく最善です。
検証チェックをトリガーするタイミングについては、複数の可能性があります。EditTextコールバック関数を使用できます。
または、TextWatcherを使用します。これが良いと思います。
以下のようにURLを検証するためにURLUtilを使用しないでください。
URLUtil.isValidUrl(url)
「http://」のような文字列を有効なURLとして提供するため、これは正しくありません。
/**
* 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();
}
場合によっては、UnitTestで、の代わりにを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
が悪いと言っているのではなく、一致するものと一致しないものを簡単にテストできるようにするだけです。