Java 是否所有正则表达式中都需要量词?
我正在构建一个Spring引导应用程序,其中输入参数使用java.validation.*进行验证。我想检查输入参数中的字母、数字和连字符Java 是否所有正则表达式中都需要量词?,java,regex,validation,Java,Regex,Validation,我正在构建一个Spring引导应用程序,其中输入参数使用java.validation.*进行验证。我想检查输入参数中的字母、数字和连字符 public class Foo { @NotNull @NotEmpty @Pattern(regexp = "^[a-zA-Z0-9-]") private String subscriberType; @NotNull @NotEmpty @Size(min = 32, max = 43)
public class Foo {
@NotNull @NotEmpty
@Pattern(regexp = "^[a-zA-Z0-9-]")
private String subscriberType;
@NotNull @NotEmpty
@Size(min = 32, max = 43)
@Pattern(regexp = "^[a-zA-Z0-9-]")
private String caseId;
......
我使用的正则表达式如下
@Pattern(regexp = "^[a-zA-Z]")
@Pattern(regexp = "^[a-zA-Z0-9-]+"
如果我使用上面的,并给出如下的输入参数
{
"subscriberType":"prepaid",
"caseId":"5408899645efabf60844de9077372571"
}
我的验证失败了
Resolving exception from handler [public org.springframework.http.ResponseEntity<java.lang.Object> my.org.presentation.NumberRecycleController.numberRecycle(java.util.Optional<java.lang.String>,my.org.domain.request.NumberRecycleReqDto)
throws java.lang.Exception]: org.springframework.web.bind.MethodArgumentNotValidException: Validation failed for argument at index 1 in method:
public org.springframework.http.ResponseEntity<java.lang.Object> my.org.presentation.NumberRecycleController.numberRecycle(java.util.Optional<java.lang.String>,my.org.domain.request.NumberRecycleReqDto)
throws java.lang.Exception, with 2 error(s): [Field error in object 'numberRecycleReqDto' on field 'subscriberType': rejected value [prepaid]; codes [Pattern.numberRecycleReqDto.subscriberType,
Pattern.subscriberType,Pattern.java.lang.String,Pattern]; arguments [org.springframework.context.support.DefaultMessageSourceResolvable:
codes [numberRecycleReqDto.subscriberType,subscriberType]; arguments []; default message [subscriberType],[Ljavax.validation.constraints.Pattern$Flag;@5dcb2ea8,org.springframework.validation.beanvalidation.SpringValidatorAdapter$ResolvableAttribute@3de9c7b1];
default message [must match "^[a-zA-Z0-9]"]] [Field error in object
'numberRecycleReqDto' on field 'caseId': rejected value [35408899645efabf60844de907737257]; codes [Pattern.numberRecycleReqDto.caseId,Pattern.caseId,Pattern.java.lang.String,Pattern];
arguments [org.springframework.context.support.DefaultMessageSourceResolvable: codes [numberRecycleReqDto.caseId,caseId]; arguments [];
default message [caseId],[Ljavax.validation.constraints.Pattern$Flag;@5dcb2ea8,org.springframework.validation.beanvalidation.SpringValidatorAdapter$ResolvableAttribute@61637994]; default message [must match "^[a-zA-Z0-9-]"]]
或
你能解释一下这里到底发生了什么吗?我知道量词在寻找给定数量的匹配项。在我的例子中,1个或多个匹配属于给定的模式
我的问题是,总是需要给出一个量词还是什么?我的初始正则表达式模式失败的原因是什么?该模式必须匹配整个字符串。字符类只匹配一个字符。如果字符串可能包含多个字符,则需要量词
顺便说一句,正则表达式开头的“^”是多余的。图案必须始终与整个字符串匹配。图案必须与整个字符串匹配。字符类只匹配一个字符。如果字符串可能包含多个字符,则需要量词 顺便说一句,正则表达式开头的“^”是多余的。模式必须始终与整个字符串匹配。^[a-zA-Z]只检查第一个字符^[a-zA-Z]+将检查所有字符^[a-zA-Z]只检查第一个字符^[a-zA-Z]+将检查所有字符。
@Pattern(regexp = "^[a-zA-Z0-9-]{1,}"