有没有适用于 Android 的成熟表单验证 API / 库?
我发现了 http://code.google.com/p/android-binding/,但似乎它仍在积极开发中。
更新:只是为了澄清我的问题。目前,我已经通过命令式的方式硬编码表单验证。我想知道是否存在一种成熟的表单验证库,允许我声明性地指定验证器(例如直接在 XML 中或使用注释或通过功能流畅的方式在代码中指定…)。
有没有适用于 Android 的成熟表单验证 API / 库?
我发现了 http://code.google.com/p/android-binding/,但似乎它仍在积极开发中。
更新:只是为了澄清我的问题。目前,我已经通过命令式的方式硬编码表单验证。我想知道是否存在一种成熟的表单验证库,允许我声明性地指定验证器(例如直接在 XML 中或使用注释或通过功能流畅的方式在代码中指定…)。
该库现在支持注释,你只需要添加它们就可以验证你的字段。下面是一个示例代码片段。
@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 / Gradlecompile '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);
还有或和与规则,允许您对多个规则执行&&和||操作。还有一个compositeOr和compositeAnd规则,允许您在多个视图之间执行验证。
如果这些规则都不够用,您可以通过扩展Rule类来编写自己的规则。
public class BusinessObject {
@NotNull
@NotEmpty
@Length(max=32)
private String name;
...
}
// collect the constraint violations
List<ConstraintViolation> violations = validator.validate(bo);
我计划在我的下一个项目中使用它,因为它有各种表达语言,但只要求Java。
它不符合JSR303规范,但也支持这些注释。
使用任何一种
android.widget.AutoCompleteTextView.Validator;
myTextview.setValidator(myCustomValidator);
或者在 onTextChangedListener
中使用 myTextView.setError(error-message)
也可以正常工作,第二种方法看起来非常好。
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 .
在Android中使用Oval库进行验证 它是基于对象的验证库,用于Object类
由于我自己曾经遇到过这样的问题,我将这个功能添加到了我的BARACUS应用框架的核心功能中。详情请见 http://baracusframework.blogspot.de/2014/01/baracus-from-scratch-part-6-automatic.html。
这个概念包括命名验证器的声明性绑定以及任何约束违规消息的自动路由。
你可以使用FormValidator库 - https://android-arsenal.com/details/1/8353。它可以与Jetpack Compose和View System一起使用。