在我的网络应用程序中,我需要获取用户输入的号码并在控制器中处理它。我需要确保该号码的长度至少为14位。如果用户输入12位数然后按'空格'两次,验证应该抓住它。
我像这样编码
public static void processNumber(@Required @MinSize(value=14,message="min size is 14") String inputNumber){
if(validation.hasErrors()) {
params.flash();
validation.keep();
...
}
}
然而,这并不像我预期的那样工作。看起来,我需要在输入到达控制器方法之前修剪输入。
有人可以建议怎么做吗?
P.S: 将输入更复杂的案例,如
'11 2233444444' '1122334ad44444'等,是否有任何验证以确保输入是一个数字并且不包含任何字母字符?
答案 0 :(得分:1)
请检查这是否可以帮助您做您想做的事情link
我希望它有所帮助。
答案 1 :(得分:1)
我不认为自定义绑定器会为您提供所需的内容,因为您不是要修改数据的绑定方式,而是要验证其中的内容。因此,我认为您正在寻找的是一个自定义验证器。
有关详细信息,请参阅此处 - http://www.playframework.org/documentation/1.2/validation#custom
但实际上,您可以使用@CheckWith批注指定要使用的验证器,然后在验证器中,您可以检查修剪过的字符串,不包含空格,也没有字母字符等。
请注意,验证器不会修改您的输入,因此如果您想忽略修剪后的数据,那么这将继续留在您的数据中,因此您可以在验证后修改(修剪)它,或者您可以使用另一个答案中讨论的自定义绑定器来完成它。
答案 2 :(得分:1)
如果您想拥有一个至少有14位数的数字,一个选项是:
public static void processNumber(@Required @Min(10000000000000) Long inputNumber)
此方法存在问题:
更多选择:
public static void processNumber(
@Required @MinSize(value=14,message="min size is 14") String inputNumber){
validation.isTrue("inputNumber", !inputNumber.contains(" "));
if(validation.hasErrors()) {
甚至更好:
public static void processNumber(
@Required @MinSize(value=14,message="min size is 14") String inputNumber){
for(int i=0;i<inputNumber.length();i++) {
validation.isTrue("inputNumber", Character.isDigit(inputNumber.charAt(i)))
if(validation.hasErrors()) {