如何在Android中的EditTextvalidationURL /网站名称?

我想从Android中的EditText获取input,URL或者只是一个网站名称,例如www.google.com,在用户点击button来提交,或者当EditText失去焦点时,URL应该被validation,就像它在格式“www.anyURL.com”…

我怎样才能做到这一点? 有没有在Android中的任何内置function?

简短的回答

在Patterns类中使用WEB_URL模式

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

如果URL有效 ,则返回True;如果URL无效 ,则返回false

长答案

从Android API级别8开始,有一个WEB_URL模式。 引用来源,它“匹配RFC 3987的大部分”。 如果您的目标级别较低,则可以简单地从源代码复制模式,并将其包含在应用程序中。 我假设你知道如何使用模式和匹配器,所以我不打算在这里更多的细节。

此外,类URLUtil提供了一些有用的方法,例如:

  • isHttpUrl()
  • isValidUrl()

这些方法的描述不是很精细,因此你可能最好从源头上找出哪一个最适合你的目的。

至于何时触发validation检查,有多种可能性:您可以使用EditTextcallback函数

  • onFocusChanged()或
  • onTextChanged()

或使用TextWatcher ,我认为这会更好。

不要使用 URLUtil来validationURL如下。

  URLUtil.isValidUrl(url) 

因为它给像“http://”这样的string作为有效的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(); } 

URLUtil.isValidUrl将自从api级别1以来存在。

或者你可以使用良好的旧正则 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不好,只是这样可以很容易地testing匹配什么,什么不匹配。