检查editText输入验证

时间:2013-12-30 14:34:06

标签: android validation url android-edittext

我想确保editText输入是以.com,.net结尾的URL,而不是其他一些字符,数字等。我在下面实现:

public class NewCard extends Activity {

EditText txtWebsite;
Button save;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_new_card);

save=(Button)findViewById(R.id.save);
save.setOnClickListener(new View.OnClickListener() {

@Override   
public void onClick(View v) {

EditText txtWebsite = (EditText) findViewById(R.id.txtWebsite);
String Website=txtWebsite.getEditableText().toString();

isValidUrl (Website);

}
});
}

public boolean isValidUrl (String txtWebsite){

Pattern regex = Pattern.compile("^[a-zA-Z0-9\\-\\.]+\\.(com|org|net|mil|edu|COM|ORG|NET|MIL|EDU)$");
                Matcher matcher = regex.matcher(txtWebsite); 
                if (matcher.matches()) {
                     return true;
               }else {
               return false;
              }

         }

我的布局:

<EditText
    android:id="@+id/txtWebsite"
    android:layout_width="288dp"
    android:layout_height="wrap_content"
    android:layout_alignParentRight="true"
    android:layout_below="@+id/txtEmail"
    android:ems="10"
    android:hint="Website"
    android:capitalize="none"
    android:textColorHint="#262d35"
     />

当我运行应用程序时,似乎“Url验证器”无法正常运行。我该如何验证文本?

3 个答案:

答案 0 :(得分:2)

您可以使用正则表达式来检查网址是否为“网址”。方法matches()以查看在这种情况下它是否是网址。

Pattern regex = Pattern.compile("^[a-zA-Z0-9\\-\\.]+\\.(com|org|net|mil|edu|COM|ORG|NET|MIL|EDU)$");
        Matcher matcher = regex.matcher(string);
        if (matcher.matches()) {
             //It's an url
       }else {
       //Not an url
       }

例如:

public boolean isValidUrl (String txtWebsite){
 Pattern regex = Pattern.compile("^[a-zA-Z0-9\\-\\.]+\\.(com|org|net|mil|edu|COM|ORG|NET|MIL|EDU)$");
        Matcher matcher = regex.matcher(txtWebsite);
        if (matcher.matches()) {
             return true;
       }else {
       return false;
      }
    }

答案 1 :(得分:1)

如果你想知道某些东西是否是某个URL,你确实可以使用正则表达式,但是你的检查有多严格,这完全取决于你想要的东西。

根据https://en.wikipedia.org/wiki/Uniform_resource_locator,网址的完整方案为:scheme://domain:port/path?query_string#fragment_id

要使用正则表达式正确检查这一点,您可以尝试这一点(为了便于阅读而呈现为JavaScript RegEx):

/^(\w+://)?([\w\-]\.)+\w+(:\d+)?/?(\w+/)*\w*(\?([^=]+=[^&]+&?)+)?$/

这应该匹配从goo.gl到https://maps.google.com/?ll=50.233234,10.865355&spn=0.001812,0.004128&t=h&z=19&layer=c&cbll=50.233234,10.865355&cbp=12,0,,0,0&photoid=po-92986447

的任何内容

唯一的问题是它还会将R.E.M与URL匹配。

为了缓解这个问题,您可以像在前面的答案中那样专门列出顶级域名,但您的列表中可能应该是exhaustive

事实上,这是一个相当复杂的问题,所以也许有助于指定输入的边界问题?你只期待youtube链接吗?您是否只期望键入没有查询字符串的基本链接?请详细说明。

答案 2 :(得分:0)

/** 
* This is used to check the given URL is valid or not.
* @param url
* @return
*/

private boolean isValidUrl(String url) {
Pattern p = Patterns.WEB_URL;
Matcher m = p.matcher(url);
if(m.matches())
    return true;
else
return false;
}