2011-07-07 59 views
16

Android是否有任何成熟的表單驗證API /庫? 我找到了http://code.google.com/p/android-binding/,但似乎正在大力發展。適用於Android的表單驗證庫?

更新:只是爲了澄清我的問題。目前,我強制性地對錶單進行了硬編碼。我想知道,如果有一個成熟的表單驗證庫,允許我聲明性地指定驗證器(例如直接在XML中或在使用註釋的代碼中或通過功能流暢的方式,...)。

回答

19

該庫現在支持註釋,您可以通過添加它們來驗證您的字段。這是一個示例代碼片段。

@NotEmpty 
@Order(1) 
private EditText fieldEditText; 

@Checked(message = "You must agree to the terms.") 
@Order(2) 
private CheckBox iAgreeCheckBox; 

@Length(min = 3, message = "Enter atleast 3 characters.") 
@Pattern(regex = "[A-Za-z]+", message = "Should contain only alphabets") 
@Order(3) 
private TextView regexTextView; 

@Password 
@Order(4) 
private EditText passwordEditText; 

@ConfirmPassword 
@Order(5) 
private EditText confirmPasswordEditText; 

訂單註釋是可選的,並指定了字段驗證的順序。如果您希望在驗證過程中保留字段的順序,這只是必需的。還有一些其他的註釋,比如@Email@IpAddress@Isbn等,

的Android工作室/搖籃

compile 'com.mobsandgeeks:android-saripaar:2.0.2' 

檢查最新版本。

的Eclipse
您可以從here下載JAR並把它添加到您的Android libs目錄。

老答(Saripaar V1)
我已經創作了驗證庫。這裏是associated blogproject。我已經成功地將它用於生產應用程序,目前它滿足我們在Android驗證表單中面對的大多數常見情況。有些規則可以直接使用,如果您需要編寫自己的規則,可以通過編寫自己的規則來實現。

下面是一個片段,說明了庫的使用。

validator.put(nameEditText, Rules.required("Name is required.")); 
validator.put(nameEditText, Rules.minLength("Name is too short.", 3)); 
validator.put(emailEditText, Rules.regex("Email id is invalid.", Rules.REGEX_EMAIL, trim)); 
validator.put(confirmPwdEditText, Rules.eq("Passwords don\'t match.", pwdEditText); 

也有orand規則,讓你在幾個規則執行&&||操作。還有一個compositeOrcompositeAnd規則,允許您在多個視圖之間執行驗證。

如果其中任何一個看起來不夠充分,可以通過擴展Rule類來編寫自己的規則。

+0

+1謝謝您的信息。是否有任何股票ValidatorListeners會例如突出顯示錯誤輸入框等? –

+0

您將在onFailure回調中收到failedView和failedRule。如果要突出顯示EditText字段,則始終可以調用setError()或requestFocus()方法。失敗的規則將通過調用failedRule.getFailureMessage()獲得失敗消息。 –

+0

你是否計劃任何聲明性擴展? (這可以只是應用,你不需要每次都編碼。) –

0

如果您的意思是驗證文本字段(EditText),那麼我會建議您使用Pattern和Matcher與正則表達式,當然我們在這裏沒有使用android API,但是android支持java API,因此您可以。

+0

你建議創建自己的驗證庫,但我的問題是有任何已經存在的,這是成熟的。 –

+0

這只是成熟的方式來做,因爲我認爲如此...... –

0

無論使用

android.widget.AutoCompleteTextView.Validator; 
myTextview.setValidator(myCustomValidator); 
onTextChangedListener

myTextView.setError(error-message) 工作正常,第二個看起來真的很棒。

+0

看到更新。 (我已經更新了問題更加清楚。) –

0

這將是簡單和成熟的方法來驗證輸入的文本或表格:

private EditText et_first_name; 
et_first_name = (EditText)findViewById(R.id.et_first_name); 
et_first_name = (EditText)findViewById(R.id.et_first_name); 
first_name.matches("^(?i)(?=.{1,20}$)([A-Za-z]+[A-Za-z0-9-_.]*$)"); // use the regex expression inside brackets and returns the error status . 
+0

但這不是指定驗證器的聲明方式。 (目前,我已經按照您的建議對其進行了硬編碼,但我正在尋找更好的方法。) –

3

我會建議OVal

public class BusinessObject { 

@NotNull 
@NotEmpty 
@Length(max=32) 
private String name; 

... 
} 

// collect the constraint violations 
List<ConstraintViolation> violations = validator.validate(bo); 

我刨使用它在我的下一個項目,因爲有各種各樣的表達式語言,但只有Java很難被要求。

它不是JSR303的編譯器,但也支持這些註釋。

+0

您知道該庫的任何Android UI綁定嗎? –

+0

我想你必須手動綁定它,但我認爲Validator可以在任何類如Form或Dialog上工作,因爲你可以註銷任何你創建或覆蓋的方法。 – kromit

+0

我在尋找一些也可以幫助用戶界面的東西,但是謝謝你提示+1。 –

0

使用橢圓形庫,用於在Android的 驗證它在對象類