你没有加字符串开始位置和字符串结束位置
所以只要有一个非特殊字符出现,就会匹配成功
对于"!@#a"就会匹配"a"
正确的写法:
/^[\u4e00-\u9fa5\da-zA-Z\-\_]+$/
我觉得像这种验证“不能出现某些字符”的正则,直接匹配那些不能出现的字符比较好。
你写的正则表达式只匹配单字符,只要匹配到一个非特殊字符test就能通过了,只不过实际匹配的项是那个非特殊字符,我觉得你也可以反向测试,
var validChar = /[^\u4e00-\u9fa5\da-zA-Z\-\_]+/
if(!validChar.test(document.form1.elements[i].value))
......