求命!求一个正则表达式,检测非法字符,要求见内
求一个正则表达式,要求如下:
检测非法字符
1.有效字符:0-9a-zA-Z@!~*()-_. '
2.字符长度不能大于512个
我写成这样,[@!~*()-_. '0-9a-zA-Z]{1,527} 但好像有问题。
请高人指点
------解决方案--------------------首先,正则表达式长度错了。
是不是用Java?如果是的话,慎重检查是否是全部转义字符!尤其注意 "[ ", "] ", "{ ", "} ", "- "。
我的经验是:先就写[0-9A-Za-z]{1,512},测试过了再一个一个地加字符 "- ", "@ "什么的,要不指不定哪就出毛病,还不好查。
LZ严重注意!!!!实际上,判断长度的工作不要交给正则表达式处理,因为正则表达式是贪婪算法。也就是说即使你这个写对了也会有问题。
比如: "abcdefg* "本来不能通过正则表达式验证,但它刚检测到 "a "就认为符合了那个表达式,然后再检查就开始把 "b "判定为“过了”;你看,根本不会说匹配到 "abcdefg* "这么多,除非之前一直不匹配,它才会带着之前的字符累计着往下匹配。
------解决方案--------------------有些符号要转义的