寫這篇文章的原因
在移動端一般很少使用復雜的表單,一般針對于屬性的更改都會打開一個新的頁面進行更改,雖然不多,但是也會有,如果一個頁面要輸入的內容包括姓名、地址、郵箱、手機號等,對各個屬性的驗證會非常麻煩,并且非常的不優雅,
于是,saripaar就出現了,一種基于規則的Android UI輸入驗證庫,通過注解即可標注驗證規則,
使用程序中發現只有四個字:簡單好用,但是官方對注解的使用并沒有一份完整的檔案,故參考原始碼整理了現有的所有注解(基于版本2.0.3),
如何使用
匯入依賴
第一步當然是匯入依賴啦,可通過implementation 'com.mobsandgeeks:android-saripaar:(latest version)'匯入saripaar,將(latest version)替換為最新版本即可,
使用注解
對需要進行驗證的可輸入View加上注解來標注驗證規則,例
@Length(min = 6, max = 9)
private AppCompatEditText et1;
該注解表示et1中的輸入內容長度只能在6到9的閉區間,
實體化Validator
mValidator = new Validator(this);
mValidator.setValidationListener(this);
Validator負責驗證給定容器中的View,通常容器為Activity或Fragment,但也可以用包含View的其他類作為容器,
實作ValidationListener
public class MainActivity extends AppCompatActivity implements Validator.ValidationListener {
// Code…
@Override
public void onValidationSucceeded() {
Toast.makeText(this, "成功了!", Toast.LENGTH_LONG).show();
}
@Override
public void onValidationFailed(List<ValidationError> errors) {
Toast.makeText(this, "失敗了!", Toast.LENGTH_LONG).show();
}
}
ValidationListener用戶監聽回呼結果,并進行相應的處理,
呼叫驗證方法
btn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
mValidator.validate();
}
});
其余的高級用法在此不做介紹,該文章主要介紹各個注解的使用,
注解
@AssertFalse
描述
用于判斷輸入內容是否為false,
作用范圍
CheckBoxRadioButtonRadioGroup
引數
sequence:確定規則的判定順序,當單個View有多個規則時生效messageResId:錯誤提示文字的資源檔案IDmessage:錯誤提示文字
注:所有注解均有這三個引數,故之后注解省略不寫
@AssertTrue
描述
用于判斷輸入內容是否為true,
作用范圍
CheckBoxRadioButtonRadioGroup
@Checked
描述
用于判斷輸入內容是否為預設值,默認預設值為true,
作用范圍
CheckBoxRadioButtonRadioGroup
引數
value:用于設定預設值,默認為true
@ConfirmEmail
描述
判斷當前輸入內容與被@Email注解的View的內容是否一致,
注:當前容器所持有的被@Email注解的View必須且只允許有一個,
作用范圍
TextView
@ConfirmPassword
描述
判斷當前輸入內容與被@Password注解的View的內容是否一致,
注:當前容器所持有的被@Password注解的View必須且只允許有一個,
作用范圍
TextView
@CreditCard
描述
判斷輸入內容是否符合信用卡卡號規則,
作用范圍
TextView
引數
cardTypes:是一個陣列,用于確定信用卡的型別,每種型別對應著不同的正則運算式Type.AMEX,美國運通卡,對應著^(3[47]\d{13})$Type.DINERS,大萊信用卡,對應著^(30[0-5]\d{11}|3095\d{10}|36\d{12}|3[8-9]\d{12})$Type.DISCOVER,發現卡,對應著^(6011\d{12})$、^(64[4-9]\d{13})$和^(65\d{14})$Type.MASTERCARD,萬事達卡,對應著^(5[1-5]\d{14})$Type.VISA,簽證卡,對應著^(4)(\d{12}|\d{15})$Type.NONE,不允許任何內置的信用卡,適用于自定義信用卡型別
@DecimalMax
描述
限制輸入內容的最大值,輸入內容會被強轉為Double型別,若輸入文字不符合Double型別,會報ConversionException例外,
作用范圍
TextView
引數
value:double型別,最大值,
@DecimalMin
描述
限制輸入內容的最小值,輸入內容會被強轉為Double型別,若輸入文字不符合Double型別,會報ConversionException例外,
作用范圍
TextView
引數
value:double型別,最小值,
@Digits
描述
判斷輸入內容是否為數字,可定義整數部分以及小數部分的最大位數,
作用范圍
TextView
引數
integer:整數部分最大位數fraction:小數部分最大位數
注:輸入內容需滿足正則
String.format("(\\d{0,%d})(\\.\\d{1,%d})?", integer, fraction);
@Domain
描述
判斷輸入內容是否是一個有效的域名,
作用范圍
TextView
引數
allowLocal:本地地址是否有效,默認為false
@Email
描述
判斷輸入內容是否是一個有效的郵箱地址,
作用范圍
TextView
引數
allowLocal:本地地址是否有效,默認為false
@Future
描述
判斷輸入的時間是否是未來時間(與當前時間相比),輸入的時間必須滿足相應的格式,
作用范圍
TextView
引數
dateFormat:時間的格式,默認為dd-MM-yyyy,以下為saripaar提供的格式(可自定義)DateFormats.DMY:dd-MM-yyyyDateFormats.YMD:yyyy-MM-ddDateFormats.MDY:MM-dd-yyyyDateFormats.DMY_TIME_12_HOURS:dd-MM-yyyy hh:mm aaDateFormats.YMD_TIME_12_HOURS:yyyy-MM-dd hh:mm aaDateFormats.MDY_TIME_12_HOURS:MM-dd-yyyy hh:mm aaDateFormats.DMY_TIME_24_HOURS:dd-MM-yyyy kk:mmDateFormats.YMD_TIME_24_HOURS:yyyy-MM-dd kk:mmDateFormats.MDY_TIME_24_HOURS:MM-dd-yyyy kk:mm
dateFormatResId:時間格式的資源ID
@IpAddress
描述
判斷輸入的內容是否是一個IP,IPv4或IPv6
作用范圍
TextView
@Isbn
描述
判斷輸入的內容是否是一個Isbn,即國際標準書號,
作用范圍
TextView
@Length
描述
限制輸入內容的文本長度,可自定義最大長度和最小長度,
作用范圍
TextView
引數
min:文本的最小長度,默認為Integer.MIN_VALUEmax:文本的最大長度,默認為Integer.MAX_VALUEtrim:是否需要先做trim操作,默認為false
@Max
描述
限制輸入內容的最大值,輸入內容會被強轉為Integer型別,若輸入文字不符合Integer型別,會報ConversionException例外,
作用范圍
TextView
引數
value:int型別,最大值,
@Min
描述
限制輸入內容的最小值,輸入內容會被強轉為Integer型別,若輸入文字不符合Integer型別,會報ConversionException例外,
作用范圍
TextView
引數
value:int型別,最小值,
@NotEmpty
描述
判斷輸入內容是否非空,
作用范圍
TextView
引數
trim:判斷之前是否要先trim,默認為falseemptyText:設定“空字串”,可自定義一段文本,當輸入此文本是則為空emptyTextResId:設定“空字串”的資源檔案
@Order
描述
確定校驗欄位的順序,當一個容器有多個View需要檢驗時,可通過該注解確定校驗順序,
作用范圍
TextViewCheckBoxRadioButtonRadioGroupSpinner
引數
value:int型別,用于確定順序
@Password
描述
用于校驗文本是否符合密碼的規則,
作用范圍
TextView
引數
min:最小字符數,默認為6scheme:Scheme型別,利用正則確定密碼的輸入格式,只能為Scheme型別,不可自定義,默認為Password.Scheme.ANYPassword.Scheme.ANY:.+Password.Scheme.ALPHA:\w+Password.Scheme.ALPHA_MIXED_CASE:(?=.*[a-z])(?=.*[A-Z]).+Password.Scheme.NUMERIC:\d+Password.Scheme.ALPHA_NUMERIC:(?=.*[a-zA-Z])(?=.*[\d]).+Password.Scheme.ALPHA_NUMERIC_MIXED_CASE:(?=.*[a-z])(?=.*[A-Z])(?=.*[\d]).+Password.Scheme.ALPHA_NUMERIC_SYMBOLS:(?=.*[a-zA-Z])(?=.*[\d])(?=.*([^\w])).+Password.Scheme.ALPHA_NUMERIC_MIXED_CASE_SYMBOLS:(?=.*[a-z])(?=.*[A-Z])(?=.*[\d])(?=.*([^\w])).+
@Past
描述
判斷輸入的時間是否是過去時間(與當前時間相比),輸入的時間必須滿足相應的格式,
作用范圍
TextView
引數
dateFormat:時間的格式,默認為dd-MM-yyyy,以下為saripaar提供的格式(可自定義)DateFormats.DMY:dd-MM-yyyyDateFormats.YMD:yyyy-MM-ddDateFormats.MDY:MM-dd-yyyyDateFormats.DMY_TIME_12_HOURS:dd-MM-yyyy hh:mm aaDateFormats.YMD_TIME_12_HOURS:yyyy-MM-dd hh:mm aaDateFormats.MDY_TIME_12_HOURS:MM-dd-yyyy hh:mm aaDateFormats.DMY_TIME_24_HOURS:dd-MM-yyyy kk:mmDateFormats.YMD_TIME_24_HOURS:yyyy-MM-dd kk:mmDateFormats.MDY_TIME_24_HOURS:MM-dd-yyyy kk:mm
dateFormatResId:時間格式的資源ID
@Pattern
描述
判斷輸入的內容是否滿足正則運算式,
作用范圍
TextView
引數
regex:正則運算式caseSensitive:是否區分大小寫
@Select
描述
判斷選擇的索引是否等于默認值,如果不等于則通過,默認值為0,
作用范圍
Spinner
引數
defaultSelection:設定默認值
@Url
描述
判斷輸入的內容是否是一個url,
作用范圍
TextView
引數
schemes:是一個陣列,url的協議陣列,可自定義,默認為{"http", "https", "ftp"}allowFragments:url片段是否允許通過,默認為true
對于@Optional和@Or
雖然該版本已經有了這兩個注解,但是并不能使用,參考作者在stackoverflow上的回復,注解將會在2.1.0版本上線

總結
本篇文章簡單介紹了Android Saripaar的用法,并著重列舉了各個注解的作用以及各個引數的意思,方便以后的查詢,
通過閱讀原始碼對saripaar有了更深的認識,并對基于注解的框架有了一個完備的認知,
以后如果有時間的話總結一下Android Saripaar實作的細節,
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/47847.html
標籤:Android
上一篇:Error : Program type already present: android.support.design.widget.CoordinatorLayout$
