2011-06-14 209 views
1

我想写一个正则表达式来允许字母数字值和特殊字符,除了这里提到的''','^','=',''','<', '>','|'我很新的这一点,并没有真正得到如何做到这一点我想类似下面:正则表达式不允许一些特殊字符

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');" 

但它不是我的文本框中的值可以是字母数字和除了上面提到的那些字符以外的任何特殊字符有人可以帮助我吗?

回答

1

/[^`^="<>|]/应该匹配除了那些字符以外的所有内容。 c haracters”。


但如果你要代替那些空字符串,你可能 希望 ^第一。

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

给 “ABC ===”

+0

感谢您将小评论一下^,+1今天教我一些东西。 – Marty 2011-06-14 07:47:14

+0

非常感谢您的回答jcomeau_ictx。但是,我实际上尝试过,如下所示: – Debojyoti 2011-06-14 07:51:21

2

重写你的函数是这样的:

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。

+0

嗨shinkou,谢谢你的回答,但它不允许我在文本框中输入多个字符。实际上,jcomeau_ictx给出的解决方案除了不能检测到禁止字符的第一次出现之外。例如:如果我写“asd>”,那么我想要的是文本应该被重新格式化为“asd”,但是这没有发生。然而,如果我尝试在“asd>”之后输入“>”,那么就会被阻止。我也希望第一次出现同样的行为。 – Debojyoti 2011-06-14 08:03:24

+0

@Debojyoti,我检查过它可以在Firefox和Chrome上运行。你使用的是什么浏览器? – shinkou 2011-06-14 08:08:24

+0

实际上是Shinkou,你说得对。我忘了使用onkeyup,我也相信你对正则表达式做了一些修改。不过,我非常感谢你,感谢你。 – Debojyoti 2011-06-14 08:17:11

0

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

首先声明你的函数一样

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); 
+0

虽然我更喜欢用正则表达式来做它仍然我必须感谢您分享这种替代解决方案:-) – Debojyoti 2011-06-14 10:14:03

0
<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> 
+0

您可以添加一些解释除了代码的答案的文本? – jonsca 2012-09-24 12:34:53

相关问题