至少对于你给出的测试字符串“hello”,似乎两个正则表达式的行为相同,所以很难知道你遇到了什么,没有进一步的信息.
这个简短的程序测试两者.示例输出在下面给出.
public class RegexTest {
static final String REGEX = "^(?=[a-zA-Z0-9,!@#$&*()_'+-=<>.?{}\\[\\]|; :\\s]*$)(?!.*[/])";
static final String TEST = "hello";
public static class TestObject {
@javax.validation.constraints.Pattern(regexp=REGEX)
String name;
}
public static void main(String[] args) {
test1();
test2();
}
public static void test1() {
java.util.regex.Pattern p = java.util.regex.Pattern.compile(REGEX);
Matcher m = p.matcher(TEST);
System.out.println(m.matches()); // false, ie, doesn't match
}
public static void test2() {
TestObject to = new TestObject();
to.name = TEST;
ValidatorFactory factory = Validation.buildDefaultValidatorFactory();
Validator validator = factory.getValidator();
Set> violations = validator.validate(to);
for(ConstraintViolation violation : violations) {
System.out.println(violation.getMessage()); // One violation, "must match"
}
}
}
false
INFO o.h.validator.internal.util.Version - HV000001: Hibernate Validator 5.2.4.Final
must match "^(?=[a-zA-Z0-9,!@#$&*()_'+-=<>.?{}\[\]|; :\s]*$)(?!.*[/])"