java和javascript的正则表达式有点不同

[size=medium][color=blue]
今天在项目中遇到一个情况,正则表达式java后端和javascript前端的写法是一致的,但是并没有验证通过,原因还没有找到,代码如下:
[/color][/size]


public class PatternTest {
private final static String TN_NAME_SUFFIX_REGEX = "[a-zA-Z0-9]+$";
private final static Pattern TN_NAME_SUFFIX_PATTERN = Pattern.compile(TN_NAME_SUFFIX_REGEX);


@Test
public void testPattern(){
Assert.assertTrue(!TN_NAME_SUFFIX_PATTERN.matcher("aaB%").matches());
Assert.assertTrue(!TN_NAME_SUFFIX_PATTERN.matcher("aaB_").matches());
Assert.assertTrue(TN_NAME_SUFFIX_PATTERN.matcher("aaB0").matches());
}
}

[size=medium][color=blue]
这样写是没有问题,但是在qa在测试的时候发现前端没有拦截住,后端拦截住了,前端的代码如下:
[/color][/size]

var v = $.trim(formMap.tnNameSuffix);
var pattern = /[0-9a-zA-Z]+$/g;

if (!v || v.length == 0) {
return "[自定义标识]请填写自定义标识!";
} else if (v.length > 16) {
return "[自定义标识]过长,最多填写16位!";
} else if(!pattern.test(v)){
return "[自定义标识]不合法,只能为[0-9a-zA-Z],请检查!";
}

[size=medium][color=blue]
测试的结果是只要不是以特殊字符结尾都可以通过,最后修改了正则表达式就通过,修改的正则表达式如下:
[/color][/size]

var v = $.trim(formMap.tnNameSuffix);
var pattern = /^[0-9a-zA-Z]+$/g;

if (!v || v.length == 0) {
return "[自定义标识]请填写自定义标识!";
} else if (v.length > 16) {
return "[自定义标识]过长,最多填写16位!";
} else if(!pattern.test(v)){
return "[自定义标识]不合法,只能为[0-9a-zA-Z],请检查!";
}

[size=medium][color=blue]
具体原因还不清楚,如果有人熟悉的话可以帮忙分析一下,为什么js里面要这么写?
[/color][/size]

你可能感兴趣的:(java,javascript,正则表达式,javascript,java,后端)