首页 文章

如何在Android中的EditText中验证URL /网站名称?

提问于
浏览
69

我想从Android的EditText中获取输入,URL或网站名称,例如www.google.com,并在用户上单击要提交的按钮,或者当EditText失去焦点时,URL应该被验证,就像它在格式“www.anyURL.com”......

我怎样才能做到这一点? Android中是否有任何内置功能?

4 回答

  • -4

    简答

    在Patterns Class中使用WEB_URL模式

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

    它将返回 True if URL is validfalse if URL is invalid .

    答案很长

    从Android API等级8开始,有一个WEB_URL模式 . 引用来源,它"match[es] most part of RFC 3987" . 如果您的目标是较低的API级别,则只需从源代码中复制该模式并将其包含在您的应用程序中 . 我假设你知道如何使用模式和匹配器,所以我不会在这里详细介绍 .

    URLUtil也提供了一些有用的方法,例如:

    这些方法的描述并不十分精细,因此您最好查看来源并找出哪一个最适合您的目的 .

    至于何时触发验证检查,有多种可能性:您可以使用EditText回调函数

    或使用TextWatcher,我认为会更好 .

    DON'T USE URLUtil 验证URL如下 .

    URLUtil.isValidUrl(url)
    

    因为它将像“http://”这样的字符串作为有效的URL而不是真的

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

    URLUtil.isValidUrl将起作用,因为它自api级别1起存在 .

  • 17

    或者你可以use good old Regex

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

    我并不是说 Patterns.WEB_URL 是坏的,它只是让它匹配,什么不匹配 .

相关问题