是否可以使用这个正则表达式
^([0][1-9] | [1][0-2]) ([0])[1-9][1-2][\d] | [3][0-1]) ([\d]{2})$
Run Code Online (Sandbox Code Playgroud)
...在这段代码中?我想要做的是限制输入其他字符,同时遵循我想要的出生日期格式MM/DD/YY。
InputFilter[] filters = new InputFilter[1];
filters[0] = new InputFilter(){
@Override
public CharSequence filter(CharSequence source, int start, int end, Spanned dest, int dstart, int dend) {
if (end > start) {
char[] acceptedChars = new char[]{'0', '1', '2', '3', '4', '5', '6', '7', '8', '9','/'};
for (int index = start; index < end; index++) {
if (!new String(acceptedChars).contains(String.valueOf(source.charAt(index)))) {
return "";
}
}
}
return null;
}
};
txtBirthday.setFilters(filters);
Run Code Online (Sandbox Code Playgroud)
我尝试使用两者来限制用户输入,每当我输入特殊字符时,editText 都不接受它(这很好)但是如果我输入 07/27/92,这是有效的,应该被接受,但程序仍然说它是无效的。这是我的代码,也许我的正则表达式有问题
String valid_bday = "^([0][0-9]|[1][0-2][\b])([0][1-9][1-2]|[3][0-1])([\b]{2})$";
Matcher validbday = Pattern.compile(valid_bday).matcher(Birthday);
//on my else if
else if(!validbday.matches())
{
Toast.makeText(getApplicationContext(), "Birth date entered is invalid. \n (MM/DD/YY)", Toast.LENGTH_LONG).show();
}
Run Code Online (Sandbox Code Playgroud)
....我想以 MM/DD/YY 格式使用它。谢谢!
您不需要使用正则表达式验证。
Android 已经为您提供了使用 android:inputType="date".
因此,将此属性添加到您的 EditText 并享受..
<EditText
android:id="@+id/editText1"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:ems="10"
android:inputType="date" >
Run Code Online (Sandbox Code Playgroud)
是的,正如卡尔文所说,您可以使用(更好的方法是)DatePicker。Android中的日期选择器就是一个很好的例子。
对于 mm/dd/yyyy 日期模式,您应该使用
(0?[1-9]|1[012])/(0?[1-9]|[12][0-9]|3[01])/((19|20)\\d\\d)
这会起作用。但请记住,这不是您的最终解决方案。您必须为那些没有 31 天或 30 天的月份实施验证。看这里以获得更好的理解。