專一於 Android 表單驗證,用方法鏈構建你的驗證規則。php
野生程序員一枚,喜歡重複發明輪子,~java
當即關注 JianyingLiandroid
項目託管在GitHub,歡迎Star!git
https://github.com/lijy91/blankapp-validation程序員
Android表單驗證的庫已經很多,例如經過註解方法的 android-saripaar,直接自定義控件的 android-edittext-validator 等等,然而這幾種方式我都以爲過於麻煩,都不是個人菜!github
並且恰好最近在用 Laravel 作一個項目,被它提供的表單驗證功能迷倒了,至關的簡單、直觀,構建驗證規則也很是的方便,因此才萌生了本身寫這個庫的想法,經過鏈式調用構建咱們的表單驗證規則。app
示例maven
$rules = [ 'username' => 'required|between:4,32|alpha_dash|unique:users', 'email' => 'required|email|unique:users', 'password' => 'required|between:6,32', ]; $this->validate($request, $rules);
支持如下控件或派生自如下的控件ide
EditText測試
CompoundButton
一、只需將 mvn-repo 地址添加到您的項目根目錄 build.gradle 文件:
repositories { maven { url 'https://raw.githubusercontent.com/lijy91/mvn-repo/master/' } jcenter() }
二、在要集成的模塊 build.gradle 文件中添加依賴,以下:
dependencies { compile 'org.blankapp:blankapp-validation:0.0.1-alpha@aar' }
實例化一個驗證器
final Validator validator = new Validator();
構建你的規則鏈並添加到驗證器
// 郵箱必須輸入,必須爲郵箱格式 validator.add(Rule.with(mEtEmail).required().email()); // 用戶名必須輸入,只能輸入字母及下劃線 validator.add(Rule.with(mEtUsername).required().alphaDash()); validator.add(Rule.with(mEtName).required().minLength(2).maxLength(32)); // 密碼必須輸入,最小長度爲6位,最大長度爲32位 validator.add(Rule.with(mEtPassword).required().minLength(6).maxLength(32)); // 生日必須輸入,格式爲yyyy-MM-dd(1991-06-01)而且是今天以前的日期 validator.add(Rule.with(mEtBirthday).required().date("yyyy-MM-dd").before(DateValidator.TODAY)); // 年齡必須輸入,而且爲 18 ~ 60 歲 validator.add(Rule.with(mEtAge).required().between(18, 60)); // 簡介必須輸入,而且最大長度不能超過255個字符 validator.add(Rule.with(mEtBio).required().maxLength(255)); // 用戶協議必須接受 validator.add(Rule.with(mCbAccepted).accepted());
閱讀文檔,查看全部驗證規則
設置驗證失敗處理器
validator.setErrorHandler(new DefaultHandler());
設置驗證結果監聽器
validator.setValidatorListener(new ValidationListener() { @Override public void onValid() { Toast.makeText(MainActivity.this, "驗證經過", Toast.LENGTH_SHORT).show(); } @Override public void onInValid(List<ValidationError> errors) { for (ValidationError error : errors) { Log.w("MainActivity", "Id:" + error.view().getId()); for (String key : error.errorMessages().keySet()) { Log.e("MainActivity", error.errorMessages().get(key)); } } Toast.makeText(MainActivity.this, "驗證失敗", Toast.LENGTH_SHORT).show(); } });
在你構建規則時,若是不指定字段名,程序將會根據傳入 View 的 Id 按規則從 strings 資源裏獲取字段名
資源名的命名規則爲:前綴 validation_field_
與移除前綴後的 viewId
拼接組成。
若是 viewId
爲 edt_email
,則該字段名的資源名爲 validation_field_email
P.S. 控件的命名規則必須爲下劃線命名法,而且必須包含前綴,如 btn_
、edt_
等
示例:
<string name="validation_field_email">電子郵箱</string> <string name="validation_field_username">用戶名</string> <string name="validation_field_name">姓名</string> <string name="validation_field_password">密碼</string> <string name="validation_field_birthday">生日</string> <string name="validation_field_age">年齡</string> <string name="validation_field_bio">簡介</string>
將須要修改的錯誤消息添加到你的項目資源文件裏,查看所有可配置的錯誤消息。
示例:
... <string name="validation_error_message_accepted">%1$s 必須接受。</string> <string name="validation_error_message_after">%1$s 必須是一個在 %2$s 以後的日期。</string> <string name="validation_error_message_alpha">%1$s 只能由字母組成。</string> <string name="validation_error_message_alpha_dash">%1$s 只能由字母、數字和破折號組成。</string> <string name="validation_error_message_alpha_num">%1$s 只能由字母和數字組成。</string> ...
當前版本還處理測試階段,暫不建議應用於真實項目中,若是你有更好的想法,或者但願加入其餘功能歡迎給我提 Issues。