安卓表单验证库?

17

有没有适用于 Android 的成熟表单验证 API / 库?

我发现了 http://code.google.com/p/android-binding/,但似乎它仍在积极开发中。

更新:只是为了澄清我的问题。目前,我已经通过命令式的方式硬编码表单验证。我想知道是否存在一种成熟的表单验证库,允许我声明性地指定验证器(例如直接在 XML 中或使用注释或通过功能流畅的方式在代码中指定…)。

8个回答

23

该库现在支持注释,你只需要添加它们就可以验证你的字段。下面是一个示例代码片段。

@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 Studio / Gradle
compile 'com.mobsandgeeks:android-saripaar:2.0.2'

检查最新的可用版本。

Eclipse
您可以从此处下载jar包,并将其添加到Android libs目录中。

旧答案(Saripaar v1)
我编写了一个验证库。这是相关博客项目。我已经在生产应用程序中成功使用它,目前它可以满足我们在Android验证表单中面临的大多数常见情况。有一些开箱即用的规则,如果您需要编写自己的规则,可以通过编写自己的Rule来实现。

以下代码段示例说明了该库的使用。

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);

还有规则,允许您对多个规则执行&&||操作。还有一个compositeOrcompositeAnd规则,允许您在多个视图之间执行验证。

如果这些规则都不够用,您可以通过扩展Rule类来编写自己的规则。


谢谢提供信息。是否有任何库存的ValidatorListeners,例如可以突出错误输入框等? - TN.
在onFailure回调中,您将收到failedView和failedRule。如果您想突出EditText字段,您可以随时调用setError()或requestFocus()方法。当您调用failedRule.getFailureMessage()时,失败规则将有一个失败消息。 - Ragunath Jawahar
你们是否计划为此添加任何声明性扩展?(这可以直接应用,而无需每次都编码。) - TN.
是的,我正在研究注释和XML声明。 - Ragunath Jawahar
@TN。我已经开始为我的库添加注释支持。请查看项目链接以获取更新。 - Ragunath Jawahar

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规范,但也支持这些注释。


你知道那个库有没有任何适用于Android UI的绑定吗? - TN.
我猜你必须手动绑定它,但我认为验证器将适用于任何类,如表单或对话框,因为您可以注释创建或覆盖的任何方法。 - Roman K
我正在寻找一些可以帮助UI的东西,但还是谢谢你的提示+1。 - TN.

0

使用任何一种

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

或者在 onTextChangedListener 中使用 myTextView.setError(error-message) 也可以正常工作,第二种方法看起来非常好。


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 .

但这不是一种声明验证器的方式。(目前,我已像你建议的那样硬编码它,但我正在寻找更好的方法。) - TN.

0

在Android中使用Oval库进行验证 它是基于对象的验证库,用于Object类


0

0
如果您想要验证文本字段(EditText)的内容,我建议您使用Pattern和Matcher与regex表达式进行匹配,当然我们这里不是使用Android API,而是Android支持Java API,因此您可以使用。

你建议创建自己的验证库,但我的问题是是否已经存在成熟的验证库。 - TN.

0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接