网页程序,用js验证,以下几种可以通过。1:全部是汉字,限定1-n个、形如床前明月。2:汉字和中文标点,但不能只有中文标点,中文标点可以在任何位置,形如 明月光,疑似 。3:两组满足2的字串有且只有一个空格、斜杠/、减号-,形如:床前 明月床前/明月床前-明月。4:两组或三组满足2的字串,每组前面有且只有一个字母,这个字母可大写或小写,形如:A唐诗B李白C明月A唐诗C明月A唐诗B李白B李白C明月。我做到了第一和第三,不过是分成两个正则,但第二种的标点做不出来,第四种也没做出来。第一种+第三种:/^[\u4e00-\u9fa5]{1,20}[-\s\/]?[\u4e00-\u9fa5]{1,20}$/g; 考虑单个汉字的情形:/^[\u4e00-\u9fa5]$/;另外,我试过在客服端传送+号到服务端,不论有没有加\,有没有encodeURI,总是变成空格,是否正常?

解决方案 »

  1.   

    回 xiaojing7兄,服务端得到的是空格。
    我自己写了一个正则。
    ^([aAbB])?[\u4e00-\u9fa5]{1,20}[bBcC]?[\u4e00-\u9fa5]{1,20}[cC]?[\u4e00-\u9fa5]{1,20}
    这个可以匹配第四种情况,不过,也能匹配 B唐诗B李白 C李白C明月 的情形,还在找怎么做到前一个已经匹配了,后面就不再匹配的表达。
      

  2.   

    错了,上面不能匹配 C李白C明月的情形 但能匹配 李白C明月 的情形。
      

  3.   

     加号 应该被解释为了连接字符串了
    URL编码下应该就好了吧或者 var data = data.replace(/\+/g, "%2B");
      

  4.   

    同样,如果传递& 就替换成 %26  
      

  5.   

    /^[\u4e00-\u9fa5]{1,20}$|^[\u4e00-\u9fa5]{1,}[-\s\/]?[\u4e00-\u9fa5]{1,}$/这个能满足1,3吧
      

  6.   


    回 xiaojing7兄,str1 = '唐诗+李白' 我用js:encodeURI(str1),alert的结果有加号,send(str1)到服务端,PHP收到的$_POST[]结果是 '唐诗 李白' 。回 chinmo 厉害!试验过,可以满足1,3,而且不用两个正则。
      

  7.   

    /^[\u4e00-\u9fa5]{1,20}$|^[\u4e00-\u9fa5]{1,}[-\s\/]?[\u4e00-\u9fa5]{1,}|^[\u4e00-\u9fa5]*[^uFF00-uFFFF]*[\u4e00-\u9fa5]+[^uFF00-uFFFF]*[\u4e00-\u9fa5]*$/g;这个能满足1,2,3吧
      

  8.   

    回 chinmo兄 12楼,可以满足。也是我没说明白,标点是全角的标点不能要半角的,所以范围扩大了,不过这个只要修改[uFF00-uFFFF]这个区间就可以了,谢谢。第四个我估计也要分开讨论,分成四种情形,用|连接
    ABC俱全的 | AB | AC | BC 。
      

  9.   

    要这么长,这里还是没加上标点的,加上标点更长。
    ^[aA]{1}[\u4e00-\u9fa5]{1,20}[bB]{1}[\u4e00-\u9fa5]{1,20}[cC]{1}[\u4e00-\u9fa5]{1,20}$|^[aA][\u4e00-\u9fa5]{1,20}[cC][\u4e00-\u9fa5]{1,20}$|^[aA][\u4e00-\u9fa5]{1,20}[bB][\u4e00-\u9fa5]{1,20}$|^[bB][\u4e00-\u9fa5]{1,20}[cC][\u4e00-\u9fa5]{1,20}$
      

  10.   

    再试验chinmo兄的12楼公式,发现对于 标点前边的汉字多过一个时就不行了。比如:"床前,明月",就只能匹配到 床前。 
      

  11.   

    str1 = '唐诗+李白' encodeURIComponent(str1),
      

  12.   

    谢谢 wcwtitxu兄,试过了,果然可以^_^。
      

  13.   


    http://oreilly.com.cn/book.php?bn=978-7-121-04684-1《精通正则表达式(第3版)》
    作者: Jeffrey E. F. Friedl 著 余晟 译
    出版: 2007年7月
    书号: 978-7-121-04684-1
    页数: 542
    定价: 75.00元
    在China-Pub购买  4-5星会员:¥56.25,这个价格我可以买到!
    在华储网购买  查看华储网购物车
    本书讲解正则表达式,这种工具能够提高工作效率、让生活变得更轻松。精心调校后的正则表达式只需要十多秒就能完成以前数小时才能完成的枯燥任务。如今,正则表达式已经成为众多语言及工具——Perl、PHP、Java、Python、Ruby、MySQL、VB.NET和C#(以及.NET Framework中的任何语言)——中的标准特性,依靠它,你能以之前完全不敢设想的方式进行复杂而精巧的文本处理。
    《精通正则表达式(第3版)》包含了对PHP及其正则表达式的讲解。这一版的更新也反映了其他语言的发展,深入讲解了Sun的java.util.regex,并特别提到了Java 1.4.2和Java 1.5/1.6之间的众多差异。
    本书的内容:
    ● 各种语言和工具的功能比较
    ● 正则引擎的工作原理
    ● 优化(能节省大量的时间)
    ● 准确匹配期望的文本
    ● 针对具体语言的章节
    《精通正则表达式(第3版)》,以明晰轻松的笔调向程序员深入浅出地讲解复杂的知识,并给出了现实世界中复杂问题的解决办法,读者能够立刻运用书中丰富的知识,巧妙而高效地解决各种问题。
    “如果你的工作需要用到正则表达式(即便你已经有本很不错的关于开发语言的书),我还是要向你强烈推荐本书。”
    ——Dr.Chris Brown, Linux Format
    “毫不夸张地说,《精通正则表达式(第3版)》是学习该工具的不二选择,也是每个程序员必备的杰作。”
    ——Jason Menard, Java Ranch
    “所有关于正则表达式的书中,找不到比这更好的了。”
    ——Zak Greant, Planet PHP
      

  14.   

    /^([ABC]?[\u4e00-\u9fa5]+([\-\s\/]?[\u4e00-\u9fa5]+)*[,。、?!]?)+$/ig
      

  15.   

    var re=/^[\u4e00-\u9fa5]{1,20}$|^([\u4e00-\u9fa5]{1,}[-\s\/、]{1}[\u4e00-\u9fa5]{1,})+$|^[\u4e00-\u9fa5]*[^uFF00-uFFFF]*[\u4e00-\u9fa5]+[^uFF00-uFFFF]*[\u4e00-\u9fa5]*$/g; 
    alert(re.test('床前明月'))//true
    alert(re.test('明月光,疑似'))//true
    alert(re.test('床前 明月、床前/明月、床前-明月'))//true
    alert(re.test('A唐诗B李白C明月、A唐诗C明月、A唐诗B李白、B李白C明月'))//false
      

  16.   

    还有这个应该不是问题啊
    var re1=/^[^uFF00-uFFFF]+$/g;
    alert(re1.test('、。'))
    alert(re1.test('、,.'))
    你看,我里面用的是 ^啊,用^就只是全角的标点啊,半角的根本不可以的啊
      

  17.   

    换成这个范围吧
    把[^uFF00-uFFFF]换成[\uFF01-\uFF0F\uFF1A-\uFF20]应该就好了
      

  18.   

    回 unixlinuxsys 20楼 谢谢推荐,我正在考虑要不要买这本书^_^。回 gingerkang  21楼 谢谢帮忙,不过你的正则也是无法剔除 A唐诗A李白A明月 这种情况。和我第三楼的表达式一样。回 chinmo 22楼,我用的是 MTracer这个软件验证的,用你23楼的表达式验证标点前面的汉字可以超过1个,但12楼的不行;并且24楼的标点好像只有;半角分号是被剔除的,,.等都能.25楼的又把。‘’剔除了,而,;则可以通过。回 bao110908 32楼 组的意思就是能符合2的一个字串。例如:李白 就符合,但 B李白 就不符合条件2。
      

  19.   

    4e00-9fa5中文字符   
    FF10-FF19全角0-9,   
    FF21-FF3A全角A-Z,   
    FF41-FF5A全角a-z   
    0021-002F     003A-0040   英文标点   
    FF01-FF0F     FF1A-FF20   中文标点 
    我 只知道这些了范围了
      

  20.   

    4e00-9fa5中文字符   
    FF10-FF19全角0-9,   
    FF21-FF3A全角A-Z,   
    FF41-FF5A全角a-z   
    0021-002F     003A-0040   英文标点   
    FF01-FF0F     FF1A-FF20   中文标点 
    我 只知道这些了范围了
      

  21.   

    顶上了,这种方法对我们菜鸟难度大些
    http://www.123818.com
    http://www.lhc303.com
    http://www.gdhack.com