包含字母或者数字或者特殊字符。6-20位。不包含中文  

解决方案 »

  1.   

    /^[a-zA-Z0-9!@#\$%\^&\*\(\)_\-\+=\|\\]{6,20}$/
      

  2.   

    [\S && [^\p{script=Han}]]{6,20}
      

  3.   

    那就用 !到~ 的字符范围,
    包含  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ  这些字符
    /^[!-~]{6,20}$/
      

  4.   

    所有的验证 都需紧跟自己的业务需求,理应考虑使用场景和可行性
    特殊符号的定义很模糊,如果需要验证,完全可以采用枚举的方式,最为直观
    如果仅仅是键盘上的可见符号,你可以采用 \xnn 匹配ASCII的方式枚举范围,比如 \x21-\x7e 范围包含了键盘上可见的特殊符号,字母,和数字
    那么正则可以如此写 /^[\x21-\x7e]{6,20}$/
    个人还是建议 枚举方式,因为有正则验证不通过的地方 需要提示用户,如果提示用户 特殊符号的话,用户一般不会理解所谓的特殊符号会有哪些,比如用户名,很多采用 字母、数字、下划线即可,提示也清晰
      

  5.   

    特殊符号定义模糊,视代码功能需要进行枚举是最稳妥的选择,如果要求的特殊符号为键盘上可见的符号,可以采用\xnn匹配ASCII的方式限制枚举范围,比如\x21-\x7e包含了键盘上可见的特殊符号、字母和数字。正则可写为/^[\x21-\x7e]{6,20}$/。