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);
                    }
                }
            }
        });

    }

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章