Android是否有成熟的表单验证API /库? 我发现http://code.google.com/p/android-binding/但似乎正处于重大发展阶段。
更新:只是为了澄清我的问题。目前,我必须进行硬编码表单验证。我想知道,如果有一个成熟的表单验证库允许我以声明方式指定验证器(例如直接在XML中或在代码中使用注释或以功能流畅的方式,......)。
答案 0 :(得分:22)
该库现在支持注释,您只需添加它们即可验证字段。这是一个示例代码段。
@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 强>
您可以从here下载jar并将其添加到Android libs
目录。
旧答案(Saripaar v1)
我创作了一个用于验证的库。这是associated blog和project。我已经成功地在生产应用程序中使用它,它目前满足我们在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);
还有or
和and
规则允许您对多个规则执行&&
和||
操作。还有一个compositeOr
和compositeAnd
规则,允许您在多个视图之间执行验证。
如果其中任何一个似乎不够,您可以通过扩展Rule类来编写自己的规则。
答案 1 :(得分: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的补充,但也支持这些注释。
答案 2 :(得分:0)
如果你的意思是验证文本字段(EditText),那么我建议你使用模式和匹配器使用正则表达式,当然我们不是在这里使用android API而是android支持java API,因此你可以。
答案 3 :(得分:0)
使用
android.widget.AutoCompleteTextView.Validator;
myTextview.setValidator(myCustomValidator);
或myTextView.setError(error-message)
在onTextChangedListener
工作正常,第二个看起来很棒。
答案 4 :(得分: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 .
答案 5 :(得分:0)
在android中使用Oval库进行验证 它是Object类
中使用的基于对象的验证库答案 6 :(得分:0)
因为我自己解决了这些问题,所以我将这个功能添加到我的BARACUS应用程序框架的核心功能中。有关详细信息,请参阅http://baracusframework.blogspot.de/2014/01/baracus-from-scratch-part-6-automatic.html。
该概念包括表单中命名验证器的声明性绑定以及任何约束违规消息的自动路由。