Javascript 不允许使用某些特殊字符的正则表达式

Javascript 不允许使用某些特殊字符的正则表达式,javascript,regex,Javascript,Regex,我想写一个正则表达式来允许字母数字值和特殊字符,除了这里提到的“``、“^”、“=”、“`、”、“''.'”,我对这个很陌生,并没有真正了解如何做。我正在尝试下面的方法: function dbaNameCheck(input, regex) { if (regex && input.value.length > 0) { if(regex.match(/dbaNameCheck/i) && input.value.match(/[0-9

我想写一个正则表达式来允许字母数字值和特殊字符,除了这里提到的“``、“^”、“=”、“`、”、“''.'”,我对这个很陌生,并没有真正了解如何做。我正在尝试下面的方法:

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();
     }
   }
}
但它没有按预期工作。我的文本框中的值可以是字母数字和除上述字符外的任何特殊字符。有人能帮我吗?

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


但是,如果要用空字符串替换这些字符串,您可能不希望首先使用
^

'|||abc<==<<<'.replace(/[<>|]/g, '')

“| | | abc如下重写函数:

function dbaNameCheck(input) 
{
    var re = /[`\^="<>|]+/g;

    if (input.value.length > 0 && re.test(input.value))   
    {
        input.value = input.value.replace(re, '');
        input.focus();
    }
}
onKeyup是您想要捕捉的事件,而不是onKeypress。

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

首先声明您的函数,如

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

函数isNumberKey(evt){
var charCode=(evt.which)?evt.which:event.keyCode;
如果(charCode!=46&&charCode>31&&charCode<97 | | charCode>122)&&charCode<65 | | charCode>96)&&charCode<48 | | charCode>57)| charCode==110 | | charCode==190)
返回false;
返回true;
}    

感谢您添加关于^,+1的小评论,感谢您今天教了我一些东西。非常感谢您的回答jcomeau_ictx。然而,我实际上尝试了如下所示:Hi shinkou,谢谢你的回答,但它不允许我在文本框中输入多个字符。实际上,jcomeau_ictx给出的解决方案是有效的,只是它无法检测到禁止字符的首次出现。例如:如果我写“asd>”,那么我想要的是文本应该被重新格式化为“asd”,但这不会发生。但是,如果我尝试在“asd>”之后输入“>”,则会被阻止。我也希望在第一次出现时有相同的行为。@Debojyoti,我已经检查过它在Firefox和Chrome上是否有效。你用的是什么浏览器?实际上,新口,你是对的。我忘了使用onkeyup,而且我相信您对正则表达式做了一些修改。不过,我欠你一顿,非常感谢。@Debojyoti,我正在测试我给你的示例代码,发现它不起作用,所以我编辑了它。(^^;虽然我更喜欢使用正则表达式,但我必须感谢您分享这个替代解决方案:-)除了代码之外,您可以添加一些文本来解释答案吗?
onkeyup="dbaNameCheck(this);"
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);
<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>