求一个正则表达式,要求如下:检测非法字符1.有效字符:0-9a-zA-Z@!~*()-_.'
2.字符长度不能大于512个我写成这样,[@!~*()-_.'0-9a-zA-Z]{1,527} 但好像有问题。请高人指点

解决方案 »

  1.   

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

  2.   

    我建议的做法是:
    1、利用String类的length属性判断长度,长度不对的直接pass掉
    2、逐个检查每一个字符是否合乎要求。还好是512个,多了的话还真够慢,嘿嘿。
      

  3.   

    Pattern p = Pattern.compile("[0-9a-zA-Z@!~\\*\\(\\)\\-_\\.\\']{1,527}");
    Matcher m = p.matcher("0-9a-zA-Z@!~*()-_.'");
    System.out.println(m.matches());