[Android] 正規表示法 設計 EditText 限制輸入為數字 & 空值

撰寫APP過程中會遇到請user輸入資料為數字的情況

以下透過正規表示法 判斷 EditText輸入為數字



在Android Studio中開啟 activity_main.xml  (app -> layout -> activity_main.xml 



在Design頁面中,點擊 EditText 物件



右邊選單中,展開inputType設定



將 number 選項打勾



實際執行於手機, 點擊 EditText 欄位 (請輸入金額) 出現數字鍵盤


程式碼如下:
public void clickCheck () {

    btn.setOnClickListener(new View.OnClickListener() {
        @Override        public void onClick(View view) {

            String money = etMoney.getText().toString();            String day = etDay.getText().toString();
            Pattern pattern = Pattern.compile("\\d+");            Matcher matcher_m = pattern.matcher(money);            Matcher matcher_d = pattern.matcher(day);
            boolean moneyEmpty = etMoney.getText().toString().isEmpty();            boolean dayEmpty = etDay.getText().toString().isEmpty();
            if (moneyEmpty || dayEmpty){
                tvMessage.setText("錢&假期欄位資訊不可為空白!!");
            } else if (matcher_d.matches() && matcher_m.matches()) {

                int m = Integer.valueOf(money);                int d = Integer.valueOf(day);
                if (m >= 20000) {
                    if (d >= 5) {
                        tvMessage.setText("可以去泰國玩 ");                    } else {
                        tvMessage.setText("有錢沒閒");                    }
                } else {
                    if (d >= 5) {
                        tvMessage.setText("有閒沒錢");                    } else {
                        tvMessage.setText("既沒錢又沒閒\n真可憐!");                    }
                }

            } else if (!matcher_d.matches() && !matcher_m.matches()){
                tvMessage.setText("請輸入數字!!\n(錢&假期欄位錯誤!!)");            } else if (!matcher_m.matches()){
                tvMessage.setText("請輸入數字!!\n(錢欄位錯誤!!)");            } else {
                tvMessage.setText("請輸入數字!!\n(假期欄位錯誤!!)");            }

        }

    });}

正規表示法判斷輸入值是否為數字

參考android官方網站文件
https://developer.android.com/reference/java/util/regex/Pattern.html

宣告:
Pattern pattern = Pattern.compile("\\d+");
Matcher matcher_m = pattern.matcher(money);
Matcher matcher_d = pattern.matcher(day);

確認是否為空值

宣告:
boolean moneyEmpty = etMoney.getText().toString().isEmpty();
boolean dayEmpty = etDay.getText().toString().isEmpty();

使用 if... else 涵式 設計對應的條件在下方TextView做對應的顯示文字
if (moneyEmpty || dayEmpty){
                tvMessage.setText("錢&假期欄位資訊不可為空白!!");

            } else if (matcher_d.matches() && matcher_m.matches()) {

                int m = Integer.valueOf(money);
                int d = Integer.valueOf(day);

                if (m >= 20000) {
                    if (d >= 5) {
                        tvMessage.setText("可以去泰國玩 ");
                    } else {
                        tvMessage.setText("有錢沒閒");
                    }
                } else {
                    if (d >= 5) {
                        tvMessage.setText("有閒沒錢");
                    } else {
                        tvMessage.setText("既沒錢又沒閒\n真可憐!");
                    }
                }

            } else if (!matcher_d.matches() && !matcher_m.matches()){
                tvMessage.setText("請輸入數字!!\n(錢&假期欄位錯誤!!)");
            } else if (!matcher_m.matches()){
                tvMessage.setText("請輸入數字!!\n(錢欄位錯誤!!)");
            } else {
                tvMessage.setText("請輸入數字!!\n(假期欄位錯誤!!)");
            }

留言