Android 编辑文本验证

Android 编辑文本验证,android,android-edittext,Android,Android Edittext,我有一个edittext,它应该允许24小时格式时间,即00:00到23:59 只剩下两次检查 1。hh不应大于23,mm不应大于59。当用户键入或移动到其他编辑文本时,我需要对此进行检查 2.is应该只有一个(最小值和最大值):符号 我创建这个动态编辑文本代码如下 final EditText timeVisited = new EditText(this); timeVisited.setId(20); timeVisited.setText(Tm); timeVis

我有一个edittext,它应该允许24小时格式时间,即00:00到23:59

只剩下两次检查

1。hh不应大于23,mm不应大于59。当用户键入或移动到其他编辑文本时,我需要对此进行检查

2.is应该只有一个(最小值和最大值)符号

我创建这个动态编辑文本代码如下

final EditText timeVisited = new EditText(this);
    timeVisited.setId(20);
    timeVisited.setText(Tm);
    timeVisited.setTextColor(Color.BLACK);
    timeVisited.setTextSize(TypedValue.COMPLEX_UNIT_SP, 12);
    timeVisited.setHint("eg. 14:30 for 2:30 PM");
    timeVisited.setPadding(5,5,5,5);
    timeVisited.setSingleLine(false);
    timeVisited.setLines(1);
    timeVisited.setBackgroundResource(R.drawable.text_bg);
    customerToCatchTblRow.addView(timeVisited);// add the column to the table row here
    LinearLayout.LayoutParams params5 = (LinearLayout.LayoutParams)timeVisited.getLayoutParams();
    params5.setMargins(0, 0, 5, 0); //substitute parameters for left, top, right, bottom
    timeVisited.setLayoutParams(params5);

    //it checks max input is 5
    int maxLength = 5;
    InputFilter[] FilterArray = new InputFilter[1];
    FilterArray[0] = new InputFilter.LengthFilter(maxLength);
    timeVisited.setFilters(FilterArray);

    //It allow only numbers and : 
    InputFilter filter = new InputFilter() 
    { 
        @Override
        public CharSequence filter(CharSequence source, int start, int end,Spanned dest, int dstart, int dend) 
        {
            for (int i = start; i < end; i++) 
            {
                if (!Character.isDigit(source.charAt(i))&& source.charAt(i) != ':') 
                {
                    return "";
                }
            }
            return null;
        } 
    }; 

    timeVisited.setFilters(new InputFilter[]{filter}); 
final EditText timeVisited=新的EditText(此);
timevisitored.setId(20);
timevisitored.setText(Tm);
timeVisited.setTextColor(颜色:黑色);
timeVisited.SettexSize(TypedValue.COMPLEX\u UNIT\u SP,12);
timeVisited.setHint(“例如下午2:30的14:30”);
时间访问。设置填充(5,5,5);
timeVisited.setSingleLine(假);
时间访问。设定线(1);
timeVisited.setBackgroundResource(R.drawable.text_bg);
CustomerLocachtblRow.addView(timeVisited);//在此处将列添加到表行
LinearLayout.LayoutParams params5=(LinearLayout.LayoutParams)timeVisited.getLayoutParams();
参数5.设置边距(0,0,5,0)//将参数替换为左、上、右、下
访问时间。设置布局参数(参数5);
//它检查最大输入为5
int maxLength=5;
InputFilter[]FilterArray=新的InputFilter[1];
FilterArray[0]=新的InputFilter.LengthFilter(最大长度);
timeVisited.setFilters(FilterArray);
//它只允许数字和:
InputFilter筛选器=新的InputFilter()
{ 
@凌驾
公共CharSequence筛选器(CharSequence源、int开始、int结束、跨区目标、int开始、int结束)
{
for(int i=start;i
一种方法是使用“:”作为分隔符拆分源变量,它将返回一个数组。现在检查数组大小,如果大于2,则源有两个以上的“:”。如果不是,则检查数组[0]是否小于23,数组[1]是否小于59

代码应该如下:(假设source是要解析的变量,isInt检查字符串是否为整数;split根据分隔符拆分字符串)

var arr=source.split(':');
如果(arr.length>2)返回false;

如果(isInt(arr[0])&&isInt(arr[1])&&arr[0]尝试过时间选择器小部件吗?是的,它没有完全使用,因为我使用的是一个表视图,此edittext是通过友好方式创建的,但源是CharSequence source,您可以使用source.toString()将其转换为字符串
var arr = source.split(':');
if(arr.length>2)return false; 
if( isInt(arr[0]) && isInt(arr[1]) && arr[0]<23 && arr[1]<59)return true;
return false;