【问题标题】:javascript regex to disallow all special charactersjavascript正则表达式禁止所有特殊字符
【发布时间】:2013-03-06 09:25:41
【问题描述】:

这是一个开始 - http://jsfiddle.net/zuVpx/1/

Javascript 代码:

<script>
    function validate(e) {
        var regex = new RegExp("[a-zA-Z0-9]");
        var key = e.keyCode || e.which;
        key = String.fromCharCode(key);

        if(!regex.test(key)) {
            e.returnValue = false;
            if(e.preventDefault) {
                e.preventDefault();
            }
        }
    }
</script>

HTML 代码:

<input type="text" onkeypress="validate(event)" />

我只想要字符和数字。退格、删除、大写锁定和箭头键等键应该可以使用。

提前致谢。

【问题讨论】:

标签: javascript jquery regex keycode


【解决方案1】:

在输入中添加id(例如“验证”)并使用:

document.querySelector('#validate').onkeypress = validate;

function validate(e) {
        e = e || event;
        return /[a-z0-9]/i.test(
                   String.fromCharCode(e.charCode || e.keyCode)
               ) || !e.charCode && e.keyCode  < 48;
}

JSFiddle

【讨论】:

  • 真的吗?那么它必须是旧版本的Mozilla。在这里可以在 Firefox 19.0 中使用,即使在 IE8 中也是如此。尝试使用 document.getElementById('validate') 而不是 `document.querySelector',或更新您的浏览器。
  • 我已经确定了问题所在。问题是 keyCode -> 35 到 40 重复键(home、end 等),例如 # 和 'end' 的代码为 35。至少在我的 Mozilla 16 中;)。
  • 我明白了。代码调整了,现在home/end、left/right、del/backspace在FF/Mozilla中也可以使用了。
  • 现在可以了。非常感谢您一直以来的努力。
  • 嘿!我在 IE8 中检查了上面的代码。它不起作用。它总是返回真。你能查一下吗?
【解决方案2】:

试试

/[-!$%^&*()_+|~=`\\#{}\[\]:";'<>?,.\/]/.test(your_variable)

如果有匹配则返回true。

【讨论】:

    【解决方案3】:

    只使用一个附加的 if 子句怎么样?有点像...

    key.charCodeAt(0) > 32
    

    所以...

    function validate(e) {
        var regex = new RegExp("[a-zA-Z0-9]");
        var key = e.keyCode || e.which;
        key = String.fromCharCode(key);
    
        if(!regex.test(key) && key.charCodeAt(0) > 32) {
            e.returnValue = false;
            if(e.preventDefault) {
                e.preventDefault();
            }
        }
    }
    

    【讨论】:

      【解决方案4】:

      要克服例如左箭头键产生与% 键相同的key 值的问题,您可以使用

      function validate(e) {
          e = e || window.event;
          var bad = /[^\sa-z\d]/i,
              key = String.fromCharCode( e.keyCode || e.which );   
      
          if ( e.which !== 0 && e.charCode !== 0 && bad.test(key) ) {
              e.returnValue = false;
              if ( e.preventDefault ) {
                  e.preventDefault();
              }
          } 
       }   
      

      任何可打印的字符都应该产生一个非零的e.whiche.charCode 值。
      JavaScript Madness: Keyboard Events

      jsFiddle.

      以上假设空格是有效的 - 如果不是,只需从否定字符类中删除 \s

      【讨论】:

        【解决方案5】:

        这对我有用。防止用户输入特殊字符(退格等除外)

        PatternValidation(e){
        
            if(!e.key.match(/^[a-zA-Z0-9]*$/))
               {
                 e.preventDefault();
               }
        },
        

        这是通过将 html 属性与 keydown 事件处理程序绑定来触发的

        <input type="text" onkeydown="PatternValidation($event)">
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2013-09-19
          • 2023-03-16
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2013-08-06
          • 2013-06-13
          • 2018-06-13
          相关资源
          最近更新 更多