2010-09-30 73 views
1

是否有任何Java驗證程序庫可用於驗證來自android應用程序的文本輸入?Java驗證器?

我知道,在春季有驗證各種不同的類型,如檢查是否值是一個INT,如果值是一個有效的電子郵件,等等等等,在覈心Java或類似甚至機器人

什麼?

提前歡呼。如果它已經實施,我不想重新發明輪子。我總是可以起訴java reg表達式來構建我自己的表達式,但是想知道它們是否是專門爲電子郵件格式完成的。

+0

你想驗證什麼樣的輸入?電子郵件地址?日期?電話號碼?你正處於正確的軌道上,沒有重新發明輪子。根據我的經驗,重新設計一個通用輸入類型的驗證通常會導致重新發明它,並帶有一些錯誤。 :D – Freiheit 2010-09-30 16:36:05

回答

2

我已經寫了一些輔助類來解決這個問題。它包含一個驗證器接口,一個抽象實現,一個validationresult類以及兩個自定義實現驗證的例子。 1用於文本上的正則表達式,以及用於檢查複選框是否被選中的簡單表達式。

這裏是鏈接到包含源代碼,並解釋表單驗證Android上一個小一點我的博客:link text

1

您應該編寫自己的驗證器方法。例如。你可以使用字符串的正則表達式,java regex tutorial

3

通常我會建議Hibernate Validator,但這可能是Android的矯枉過正。如果你正在做簡單的表單輸入,你可以編寫你自己的驗證方法並使用正則表達式來驗證你的輸入。有幾個正則表達式驗證電子郵件地址:

How to Find or Validate an Email Address

1

是的,我已經寫了一庫處理與Android驗證。它默認驗證EditText,CheckBox,RadioButton,Spinner。您還可以使用註釋來簡化驗證。

您不受內置註釋或規則的限制。您始終可以擴展庫中的Rule類,以驗證您的自定義視圖和規則。

它還支持異步驗證(比如檢查從遠程服務器唯一的用戶名。)

您可以從here檢查項目頁面。

我還寫了一個blog,它描述瞭如何在內置規則不足時編寫自定義規則。

希望這會有所幫助。

編輯(作爲澄清jonney的評論)

是的,你已經提出有意義。要註冊一個新帳戶並在同一網絡服務電話中驗證,可能需要撥打n電話才能註冊新帳戶,但我在博客中描述的示例需要n + 1電話才能註冊新帳戶。然而,這個例子只是展示了Validator的功能。

要完成您正在尋找的內容,您只需編寫一條新規則即可。

Rule<EditText> registerIfUniqueRule = new Rule<EditText>("Username must be unique.") { 

    public boolean isValid(EditText view) { 
     String username = view.getText().toString(); 
     boolean accountRegistered = false; 

     // Make a call to your web service 
     // Mode code… 

     return accountRegistered; 
    } 
} 

現在將此規則添加到您的Validator實例中。

validator.put(usernameEditText, registerIfUniqueRule); 

並從您的任何EventListener調用異步驗證方法。

validator.validateAsync(); 

你完成了;)的驗證可能有限制,但不是在的情況下,你所提到的,我們會想出新方法,使用API​​一旦我們習慣了。

+0

我讀過你的博客,它看起來像一個體面的驗證器,但我認爲你提供的示例場景對於後端來說並不是很好的一個。而不是做兩個網絡電話來檢查用戶名和添加新用戶。最好的實際解決方案是在一次呼叫下實現所有的服務器端驗證,即添加一個新用戶。 如果我個人不得不使用這樣的API處理服務器端驗證分開,我會瘋狂大聲笑。 – jonney 2012-11-01 15:18:00