生日格式

时间:2013-05-17 05:06:13

标签: android regex

是否可以使用此正则表达式

^([0][1-9] | [1][0-2]) ([0])[1-9][1-2][\d] | [3][0-1]) ([\d]{2})$

...在这段代码里面?我想要做的是限制输入其他字符,同时遵循我想要的出生日期格式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);

我尝试使用两者来重写用户输入,每当我输入特殊字符时,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();
}

....我希望以MM / DD / YY格式提供。谢谢!

1 个答案:

答案 0 :(得分:4)

您无需使用正则表达式验证。

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" >

是的,因为calvin说你可以使用(更好的方法)DatePicker。 Date picker in Android是一个非常好的例子。


对于mm / dd / yyyy日期模式,您应该使用

(0?[1-9]|1[012])/(0?[1-9]|[12][0-9]|3[01])/((19|20)\\d\\d)

这会奏效。但请记住,这不是您的最终解决方案。您必须对没有31天或30天的月份执行验证。 Look here for better understanding.