近期项目中正在做后台校验,而后台校验也基本都是使用正則表達式校验。本文做一些粗略的总结。
1、字符串长度:.{1,10},注意有一个点在{}前,表示匹配全部。‘{}’之前一定是一个捕获组,因此假设有其它筛选要求而且限制长度则为在总捕获组的最后加上{}来限制长度。
2、怎样表示不为abcd的随意一个字符:([^abcd])*。使用^表示在[]不为[]内的随意字符;注意,常有人写成([^a|b|c|d])*,[]里边的|不代表或者的意思,这里指表示|这个字符本省。
3、怎样表示字符串中不含有adc或def等字符串:((?!adc)(?!def).)* 。当中adc为且的关系;这里有个小圆点的原因是:写正則表達式须要记住的一个重要原则就是正則表達式都是基于位校验的,因此假设此处我们没有小圆点来匹配位,这个正則表達式就是错误的。
4、怎样表示多个限制条件:即多个限制条件且。使用多个捕获组相连接就可以。即使用多个()相连。如:怎样保证字符串中不存在adc、def且不存在双引號、单引號、斜杠、尖括号等,且长度保证在40位以内:((?
!adc)(?!def)([^\"'\\<])){0,40},就像之前说的{}之前须要一个大的括号来作为一个终于捕获组。
5、怎样匹配包括换行符等在内的特殊字符的全部字符:我之前写的是这种:(.|//s){1,2000}。可是有一天測试竟然告诉我当他真的用2000个字符来验证的时候。这个直接导致程序异常了,经过多方验证原来这是jdk的一个bug,于是仅仅能改用([//s//S]){1,2000}。这里使用一个小技巧,表示全部字符时用//s和//S取代,由于//s代表全部换行符 空格符等字符,而//S恰好有表示非换行符等。正好是一个互补关系。