1. 程式人生 > >Android表單校驗器,讓你的文字校驗清晰化

Android表單校驗器,讓你的文字校驗清晰化

對於一般專案的業務層,註冊頁的輸入框都密密麻麻,對輸入文字的檢驗也千奇百怪,在應對多個文字框文字進行判斷時,總是if、else不僅讓我們的程式碼寫的過長,而且有時又會造成邏輯混亂,這時我們移動端可以採用表單的模式把當前模組中的所有文字框放入一個表單校驗器中,統一進行驗證處理。LZ封裝了一個表單驗證器,支援Textview及其子類。


LZ定義了一個規則介面,所有子規則都實現了這個Rule,定義了兩個通用方法

public interface Rule {

    boolean validate(String value);
String getErrorMessage();
}
來看下具體實現類
,最基本的非空判斷,validate做校驗處理,getErrorMessage獲取錯誤資訊
public class RequiredRule implements Rule {
    private String message;
    public RequiredRule(String message) {
        this.message = message;
}

    @Override
public boolean validate(String value) {
        return value != null && !value.isEmpty();
} @Override public String getErrorMessage() { return message; } }
封裝的驗證器,LZ把view和校驗規則放在map裡,value是Rule型別的陣列,也就是說一個view可以對應多個規則,可以對操作的文字框進行多種型別的判斷
public class Validator {

    public Map<TextView, List<Rule>> validations = new LinkedHashMap<TextView, List<Rule>>();
public void register(TextView textView, Rule... rules) { validations.put(textView, Arrays.asList(rules)); } public void unregister(TextView textView) { validations.remove(textView); } public void validateAll(ValidateResultCall resultCall) { boolean isTure = true; for (TextView key : validations.keySet()) { for (Rule rule : validations.get(key)) { if (!rule.validate(String.valueOf(key.getText()))) { key.requestFocus(); resultCall.onFailure(key, rule.getErrorMessage()); isTure = false; return; } } } if (isTure) resultCall.onSuccess(); } public boolean validate(EditText editText) { List<Rule> rules = validations.get(editText); if (rules == null) { return true; } else { for (Rule rule : rules) { boolean validate = rule.validate(String.valueOf(editText.getText())); if (!validate) { return false; } } } return true; } }

我又封裝了正則的base類

public class RegexRule implements Rule {
    private String regex;
    private String message;
    public RegexRule(String regex, String message) {
        this.regex = regex;
        this.message = message;
}

    @Override
public boolean validate(String value) {
        return Pattern.compile(regex).matcher(value).matches();
}

    @Override
public String getErrorMessage() {
        return message;
}
}
用來做郵箱校驗的RegexRule的子類
public class EmailRule extends RegexRule{

    public EmailRule(String message) {
        super("^\\w+([-+.]\\w+)*@\\w+([-.]\\w+)*\\.\\w+([-.]\\w+)*$", message);
}
}

具體使用

在build.gradle中新增
compile 'com.yuhoon.validator:validator:v0.3'
例項validator
Validator validator = new Validator();
註冊控制元件及驗證規則
validator.register((EditText) findViewById(R.id.edt_password), new RequiredRule("密碼不能為空"), new UniformityRule((EditText) findViewById(R.id.edt_rePassword), "兩次密碼輸入不一致"));
validator.register((EditText) findViewById(R.id.edt_rePassword), new RequiredRule("密碼不能為空"));

統一處理校驗結果
validator.validateAll(new ValidateResultCall() {
    @Override
public void onSuccess() {
        //TODO 成功
Toast.makeText(MainActivity.this, "檢驗成功", Toast.LENGTH_SHORT).show();
}

    @Override
public void onFailure(TextView view,String message) {
        //TODO 失敗
view.setText(null);
Toast.makeText(MainActivity.this, message, Toast.LENGTH_SHORT).show();
}
});
如果是單一控制元件也可以直接呼叫validate去做校驗,返回值為boolean,true為驗證通過
if (validator.validate((EditText) findViewById(R.id.edt_password))) {
    //TODO 成功
} else {
    //TODO 失敗
}

定義的規則類

正則校驗

  • EmailRule   郵箱校驗

  • IdCardRule  身份證校驗(15或18位)

  • PhoneNumberRule 電話校驗

  • UrlRule URL校驗

普通校驗

  • ExactLengthRule 標準長度校驗

  • MaxLengthRule   最大長度校驗

  • MinLengthRule   最小長度校驗

  • RequiredRule    非空校驗

  • UniformityRule 與指定edittext進行文字校驗

非校驗

  • ConfirmationRule    確認提示資訊

需要新增新規則的小夥伴,如果是普通規則實現Rule介面,如果是正則表示式,就繼承RegexRule。

相關推薦

Android文字清晰

對於一般專案的業務層,註冊頁的輸入框都密密麻麻,對輸入文字的檢驗也千奇百怪,在應對多個文字框文字進行判斷時,總是if、else不僅讓我們的程式碼寫的過長,而且有時又會造成邏輯混亂,這時我們移動端可以採用表單的模式把當前模組中的所有文字框放入一個表單校驗器中,統一進行驗證處理

CSS3新增的偽類選擇體驗使用CSS3的快感。

CSS選擇器用於選擇你想要的元素的樣式的模式。偽類元素主要用於對已有選擇器做進一步的限制,對已有選擇器能匹配的元素做進一步的過濾。 偽類選擇器 1.UI元素狀態偽類選擇器 UI元素狀態偽類選擇器主要用於根據UI元素的狀態進行篩選,UI元素狀態偽類選擇器有如下幾個。

掌握這款PDF編輯的職場更輕鬆

Word是我們日常經常要使用的辦公軟體,它能增加我們的工作效率。但是僅會使用Word這種大眾的工具,並不能使我們在職場上高人一籌。 PDF作為一種跨系統的檔案格式,被普遍應用於辦公中。但是PDF不可編輯的特性讓非常多職場小白非常頭痛。 下面就來給大家介紹一款好用的PDF編輯軟體——福昕PDF編輯器個人版。

js 操作補充(取得欄位元素input選擇文字、獲取選擇文字的值)

var form = document.getElementById("myForm"); var field = form.elements[0]; // 選擇文字 field.select() // 選擇部分文字 field.setSelectionRange(0,

五分鐘帶看完CSS3新增的偽類選擇體驗使用CSS3的快感。

CSS選擇器用於選擇你想要的元素的樣式的模式。偽類元素主要用於對已有選擇器做進一步的限制,對已有選擇器能匹配的元素做進一步的過濾。 偽類選擇器 1.UI元素狀態偽類選擇器 UI元素狀態偽類選擇器主要用於根據UI元素的狀態進行篩選,UI元素狀態偽類選擇器有如下幾個。

Android 軟鍵盤的全面解析不再怕控件被遮蓋

() details 聲明 token andro 博文 blog 轉載 targe 博客地址:http://blog.csdn.net/l540675759/article/details/74528641 (2)在軟鍵盤彈出時,是否需要Activity對此進行調整adj

Element-ui的中怎麽添加正則

手機號碼 cti func req mod blur trigge ret str 1. 以中國大陸手機號驗證為例 // 這是組價的代碼 <el-form-item prop="mobile"> <el-input type="text" v-mo

element UI 中 el-form 包含多個 el-input 時的方法

這一點element-ui真是有點死板,我是這樣解決的,有兩個情況,prop可以只繫結第一個input的,第二個input寫上ref屬性,驗證的rules中寫一個方法,這個方法驗證第一個input框的同時,通過 this.$refs.xxx.value的形式獲取第二個input框值,只要這兩

shiro基於的攔截身份驗證、基於 Basic 的攔截身份驗證普通身份驗證的區別

目錄 普通身份驗證與基於表單的攔截器、基於basic的攔截器身份驗證的區別? 普通身份驗證的一個缺點就是,永遠返回到同一個成功頁面(比如首頁),在實際專案中比如支付時如果沒有登入將跳轉到登入頁面,登入成功後再跳回到支付頁面;對於這種功能大家可以在登入時把

Spring AOP+反射實現自定義動態配置規則規則飛起來

場景小計 之前專案都是使用hibernate-validator來校驗引數,但是實際上會出現一些小問題,就是校驗規則都是通過註解的方式來完成,這樣如果專案上線了,這個引數校驗規則就沒辦法修改,如果出現校驗規則問題,就必須修改後重新緊急上線(之前因為手機

關於easyui-combobox在提交的時候如何做非空(筆記)

問題:關於表單提交的時候非空校驗問題? 輸入框下拉列表如下圖所示 就是在點選inquiry查詢按鈕的時候,Taxpayer ID框需要做非空校驗,如果為空則不能進行資料查詢 下面為在查詢方法上做的

百度編輯例項相當於from中的內容直接post到後臺

<!DOCTYPE HTML> <html lang="en-US"> <head> <meta charset="UTF-8"> &

jQuery選擇元素選擇

padding ima col image char ref 選中 doc 技術分享 <!DOCTYPE html> <html> <head> <meta http-equiv="Content-type" conte

#-webkit-autofill##google#啟用自動填充時如何覆蓋黃色背景

type important area not work box ins chang 填充 ace #-webkit-autofill##google#啟用表單自動填充時,如何覆蓋黃色背景 google和opera瀏覽器的表單自動填充後,輸入框均會變成黃色背

Jquery | 基礎 | 使用 jQuery 過濾選擇

提交按鈕 密碼框 1.0 doc nal gid 過濾 選擇器 ffffff <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DT

Android P的APP適配總結快人一步

信息 最新 webview 包名 圖片 bmp illegal 名單 block 歡迎大家前往騰訊雲+社區,獲取更多騰訊海量技術實踐幹貨哦~ 本文由QQ音樂技術團隊發表於雲+社區專欄 上篇:Android P 行為變更適配 Android P 這次有很多行為變更,其中不

JavaScript 小例項 - 輸入內容檢測對頁面的增刪改

JavaScript 小例項 - 表單輸入內容檢測,對頁面的增刪改 效果體驗地址:https://xpwi.github.io/js/JavaScript01/jsForm.html 功能: 1.向頁面寫入資料 2.刪除頁面資料 + 刪除提示【確實】才刪除 3.獲取表單輸入的內容,並簡單驗

php學習筆記:第八節--和使用者輸入$_GET,$_POST

PHP 的 $_GET 和 $_POST 用於檢索表單中的值,比如使用者輸入。 PHP 表單處理 表單例項: <html> <body> <form action="welcome.php" method="post"> Name: <inpu

Android 框架

Android 收集好用的庫與UI效果demo索引 1.MPAndroidChart是一款圖表框架 折線圖、柱形圖、餅形圖等圖示樣樣都有 github  https://github.com/PhilJay/MPAndroidChart MPAndroidChart 直線圖

React學習之旅----獲取輸入的值雙向繫結

react中實現雙向繫結input輸入框值 import React, { Component } from 'react'; class Event extends Component { constructor(props) { super(props) this.sta