Android实现EditText输入框实时正则判断内容是否合法以及获取焦点判断和失去焦点判断

我们在开发中,可能会遇到需要判断用户在输入框里写的内容合不合法,比如判断用户输入的内容是否是手机号,接下来我通过详细说明一个小Demo来解决这个问题


首先看一下这个Demo实现的效果图
我多打了一位数字就会提示错误了
在这里插入图片描述
再来一个正确的效果,失焦就不贴图了,一样的效果
在这里插入图片描述


进入正题,页面的代码我就不写在这里了,如果需要完整Demo,我也传到csdn了,可以到这里下载:

https://download.csdn.net/download/z806899669/11087630

实时监听代码

红框处解释:
1.在这里写正则,我写的这个是手机号的验证
2.正则校验成功后的处理
3.正则校验失败后的处理
在这里插入图片描述

失焦监听代码

红框处解释:
1.输入框的名字
2.如果你想在获取焦点时触发就可以把处理代码写在这里
3.输入框失去焦点时执行的代码
在这里插入图片描述

Activity完整代码

代码里写了比较详细的注释,希望可以帮到大家

package com.example.zhengzeyanzheng;

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.text.Editable;
import android.text.TextWatcher;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
import android.widget.Toast;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class MainActivity extends AppCompatActivity {
    //创建对象
    private TextView tv;//提示信息TextView
    private EditText shishiText;//实时监听输入框
    private EditText shiJiaoText;//失焦监听输入框

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

        //绑定提示信息TextView
        tv = findViewById(R.id.tv);
        //绑定实时检测的输入框
        shishiText = (EditText) findViewById(R.id.ShiShiText);
        //绑定失焦检测的输入框
        shiJiaoText = (EditText) findViewById(R.id.ShiJiaoText);

        //给实时监听功能的EditText设置监听
        shishiText.addTextChangedListener(new TextWatcher() {
            //改变之前会执行的方法
            @Override
            public void beforeTextChanged(CharSequence s, int start, int count, int after) { }
            //实时监听
            @Override
            public void onTextChanged(CharSequence s, int start, int before, int count) {
                String tel = shishiText.getText().toString();
                Pattern p = Pattern.compile("^((13[0-9])|(15[^4])|(18[0-9])|(17[0-8])|(147,145))\\d{8}$");//正则
                Matcher m = p.matcher(tel);
                if (m.matches()) {
                    //提示
                    Toast.makeText(getApplicationContext(), "[实时]您输入了正确的手机号", Toast.LENGTH_LONG).show();
                    //修改提示信息TextView
                    tv.setText("[实时]您输入了正确的手机号"+s.toString());
                } else {
                    //提示
                    Toast.makeText(getApplicationContext(), "[实时]正则校验手机号不正确:"+s.toString(), Toast.LENGTH_LONG).show();
                    //修改提示信息TextView
                    tv.setText("[实时]正则校验手机号不正确:"+s.toString());
                }
            }
            //改变之后会执行的方法、注意,在此写验证方法将导致死循环,请不要在这里进行验证操作
            @Override
            public void afterTextChanged(Editable s) { }
        });



        //给失焦监听功能的EditText绑定OnFocusChangeListener事件
        shiJiaoText.setOnFocusChangeListener(new android.view.View.OnFocusChangeListener() {
            @Override
            public void onFocusChange(View v, boolean hasFocus) {
                if (hasFocus) {
                    // 此处为得到焦点时的处理内容
                } else {
                    // 此处为失去焦点时的处理内容
                    String tel = shiJiaoText.getText().toString();
                    Pattern p = Pattern.compile("^((13[0-9])|(15[^4])|(18[0-9])|(17[0-8])|(147,145))\\d{8}$");//正则
                    Matcher m = p.matcher(tel);
                    if (m.matches()) {
                        //提示
                        Toast.makeText(getApplicationContext(), "[失焦]您输入了正确的手机号", Toast.LENGTH_LONG).show();
                        //修改提示信息TextView
                        tv.setText("[失焦]您输入了正确的手机号"+tel);
                    } else {
                        //提示
                        Toast.makeText(getApplicationContext(), "[失焦]正则校验手机号不正确:"+tel, Toast.LENGTH_LONG).show();
                        //修改提示信息TextView
                        tv.setText("[失焦]正则校验手机号不正确:"+tel);
                    }
                }
            }
        });

    }