我想确保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验证器”无法正常运行。我该如何验证文本?
答案 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*(\?([^=]+=[^&]+&?)+)?$/
的任何内容
唯一的问题是它还会将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;
}