求命!求一个正则表达式,检测非法字符,要求见内

myzte 2007-05-29 08:04:04
求一个正则表达式,要求如下:

检测非法字符

1.有效字符:0-9a-zA-Z@!~*()-_.'
2.字符长度不能大于512个

我写成这样,[@!~*()-_.'0-9a-zA-Z]{1,527} 但好像有问题。

请高人指点
...全文
830 4 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
believefym 2007-05-29
  • 打赏
  • 举报
回复
Pattern p = Pattern.compile("[0-9a-zA-Z@!~\\*\\(\\)\\-_\\.\\']{1,527}");
Matcher m = p.matcher("0-9a-zA-Z@!~*()-_.'");
System.out.println(m.matches());
believefym 2007-05-29
  • 打赏
  • 举报
回复
有些符号要转义的
AndyJee 2007-05-29
  • 打赏
  • 举报
回复
我建议的做法是:
1、利用String类的length属性判断长度,长度不对的直接pass掉
2、逐个检查每一个字符是否合乎要求。还好是512个,多了的话还真够慢,嘿嘿。
AndyJee 2007-05-29
  • 打赏
  • 举报
回复
首先,正则表达式长度错了。

是不是用Java?如果是的话,慎重检查是否是全部转义字符!尤其注意"[","]","{","}","-"。

我的经验是:先就写[0-9A-Za-z]{1,512},测试过了再一个一个地加字符"-","@"什么的,要不指不定哪就出毛病,还不好查。

LZ严重注意!!!!实际上,判断长度的工作不要交给正则表达式处理,因为正则表达式是贪婪算法。也就是说即使你这个写对了也会有问题。

比如:"abcdefg*"本来不能通过正则表达式验证,但它刚检测到"a"就认为符合了那个表达式,然后再检查就开始把"b"判定为“过了”;你看,根本不会说匹配到"abcdefg*"这么多,除非之前一直不匹配,它才会带着之前的字符累计着往下匹配。

62,634

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧