【问题标题】:Regular expression for not allowing some special characters不允许某些特殊字符的正则表达式
【发布时间】:2011-06-14 07:39:45
【问题描述】:

我想写一个正则表达式来允许字母数字值和特殊字符,除了这里提到的'`','^','=','"','','|'我对此很陌生,并没有真正了解如何去做。我正在尝试以下内容:

function dbaNameCheck(input, regex) 
{
  if (regex && input.value.length > 0)
   {
    if(regex.match(/dbaNameCheck/i) && input.value.match(/[0-9A-Za-z]|[\`\^\=\"\<\>\|]*/g))   
     {
         input.value = input.value.replace(/[\`\^\=\"\<\>\|]*/g, '');
         input.focus();
     }
   }
}

我在按键事件中这样调用这个函数:

onkeypress="dbaNameCheck(this,'dbaNameCheck');"

但它没有按预期工作。我的文本框中的值可以是字母数字和除上述字符之外的任何特殊字符。有人可以帮我解决这个问题吗?

【问题讨论】:

    标签: javascript regex


    【解决方案1】:

    像这样重写你的函数:

    function dbaNameCheck(input) 
    {
        var re = /[`\^="<>|]+/g;
    
        if (input.value.length > 0 && re.test(input.value))   
        {
            input.value = input.value.replace(re, '');
            input.focus();
        }
    }
    

    那就这样称呼吧:

    onkeyup="dbaNameCheck(this);"
    

    onKeyup 是您要捕获的事件,而不是 onKeypress。

    【讨论】:

    • 您好 shinkou,感谢您的回答,但不允许我在文本框中输入多个字符。实际上 jcomeau_ictx 给出的解决方案是可行的,只是它无法检测到禁用字符的第一次出现。例如:如果我写“asd>”,那么我想要的是文本应该重新格式化为“asd”,但这并没有发生。但是,如果我尝试在“asd>”之后输入“>”,那么这将被阻止。我也希望在第一次出现时也有相同的行为。
    • @Debojyoti,我已经检查过它是否适用于 Firefox 和 Chrome。你用的是什么浏览器?
    • 其实新光,你是对的。我忘了使用onkeyup,我相信你对正则表达式做了一些修改。不过,我欠你一个款待,非常感谢。
    • @Debojyoti,我正在测试我给你的示例代码,发现它不起作用,所以我编辑了。 (^^;
    【解决方案2】:

    /[^`^="&lt;&gt;|]/ 应该匹配除这些字符之外的所有内容。第一个 ^ 表示“除以下字符之外的任何内容”。


    但是如果你要用空字符串替换那些,你可能首先想要^
    '|||abc<==<<<'.replace(/[<>|]/g, '')
    

    给出“abc==="

    【讨论】:

    • 感谢您添加关于 ^ 的小评论,+1 今天教我一些东西。
    • 非常感谢您的回答 jcomeau_ictx。但是,我实际上尝试了如下所示:
    【解决方案3】:

    仅供参考,这是另一种(老式)方法来实现您想要做的事情,而不使用正则表达式。但是,如果不能处理复制和粘贴。

    首先声明你的函数

    function killKeys(e)
    {
        switch(e.charCode)
        {
        case 60: // "<"
        case 61: // "="
        case 62: // ">"
        case 94: // "^"
        case 96: // "`"
            return false;
            break;
        default:
            return true;
        }
    }
    

    那就这样称呼吧

    onkeypress="return killKeys(event);
    

    【讨论】:

    • 虽然我更喜欢使用正则表达式,但我仍然必须感谢您分享这个替代解决方案:-)
    【解决方案4】:
    <script language="javascript" type="text/javascript">
        function isNumberKey(evt) {
            var charCode = (evt.which) ? evt.which : event.keyCode;
            if (charCode != 46 && charCode > 31 && (charCode < 97 || charCode > 122) && (charCode < 65 || charCode > 96) && (charCode < 48 || charCode > 57) || charCode == 110 || charCode == 190)
                return false;
            return true;
        }    
    </script>
    
    <asp:TextBox  ID="txtCompany" runat="server" onkeypress="return isNumberKey(event)" ></asp:TextBox>
    

    【讨论】:

    • 除了代码之外,您能否添加一些解释答案的文字?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-10-06
    • 1970-01-01
    • 1970-01-01
    • 2017-08-15
    相关资源
    最近更新 更多