Pre*_*tam 80 validation url android android-widget android-edittext
我想从Android中获取输入,URL或网站名称,例如www.google.com,EditText用户点击Button要提交,或者当EditText失去焦点时,应该验证URL,例如格式为" www.anyURL.com "......
我怎样才能做到这一点?Android中是否有任何内置功能?
小智 255
在Patterns Class中使用WEB_URL模式
 Patterns.WEB_URL.matcher(potentialUrl).matches()
如果URL有效,它将返回True,如果URL无效,则返回false.
从Android API等级8开始,有一个WEB_URL模式.引用来源,它"匹配[RFC]大部分RFC 3987".如果您的目标是较低的API级别,则只需从源代码中复制该模式并将其包含在您的应用程序中.我假设你知道如何使用模式和匹配器,所以我不会在这里详细介绍.
另外,类URLUtil提供了一些有用的方法,如:
这些方法的描述并不十分精细,因此您最好查看来源并找出哪一个最适合您的目的.
至于何时触发验证检查,有多种可能性:您可以使用EditText回调函数
或使用TextWatcher,我认为会更好.
请勿使用 URLUtil 来验证URL,如下所示.
 URLUtil.isValidUrl(url)
因为它将像"http://"这样的字符串作为有效的URL而不是真的
Sha*_*til 18
/** 
* 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
}
| 归档时间: | 
 | 
| 查看次数: | 46173 次 | 
| 最近记录: |