我有一个java正则表达式(用于验证电子邮件地址,虽然这不是我的问题所在),它在标准的Java应用程序中工作,但是当我将相同的代码放入一个宁静的Web服务时,它不再有效。应用程序中的代码如下所示:
public static void main(String[] args) {
List <String> emails = new ArrayList();
emails.add("user@domain.com");
emails.add("user@domain.co.in");
//Invalid emails
emails.add(".username@yahoo.com");
emails.add("username@yahoo.com.");
String regex = "^[\\w!#$%&'*+/=?`{|}~^-]+(?:\\.[\\w!#$%&'*+/=?`{|}~^-]+)*@(?:[a-zA-Z0-9-]+\\.)+[a-zA-Z]{2,6}$";
Pattern pattern = Pattern.compile(regex);
for(String email : emails){
Matcher matcher = pattern.matcher(email);
System.out.println(email +" : "+ matcher.matches());
}
}
此示例已从here
无耻地复制这实际上适用于我的目的。但是,当我尝试将相同的模式和匹配器包含到Web服务中时,我总是得到一个错误的匹配。我的尝试如下:
@GET
@Path("/{i}")
@Produces(MediaType.APPLICATION_JSON)
public Response getData( @PathParam("i") String eMailAddress_ ) {
String returnStr;
String regex = "^[\\\\w!#$%&'*+/=?`{|}~^-]+(?:\\\\.[\\\\w!#$%&'*+/=?`{|}~^-]+)*@(?:[a-zA-Z0-9-]+\\\\.)+[a-zA-Z]{2,6}$";
Pattern pattern = Pattern.compile(regex);
Matcher matcher = pattern.matcher(eMailAddress_);
if (matcher.matches()) {
returnStr = eMailAddress_ + " is VALID";
}
else {
returnStr = eMailAddress_ + " is INVALID";
}
return Response.ok("{\"Result\":\"" + returnStr + "\"}", MediaType.APPLICATION_JSON).build();
}
现在,如果我在网址上发送user@domain.com,我从匹配器返回的响应为FALSE。
我甚至试图在webservice中硬编码eMailAddress_为user@domain.com,这样无论我传递什么参数,webservice都会将匹配器应用于我知道在第一个应用程序中验证为TRUE的硬编码值。我仍然让匹配器返回FALSE。
我在java 1.8上使用netbeans 8.2。