2014-01-10 109 views
0

这个正则表达式一直返回false,我看不出为什么? 我有一个触发这个事件的onkeydown事件,我尝试了'w'键,它不起作用。正则表达式不起作用

var keyGLOB = ''; 

function editProductSearch (event) { 
    console.log(keyGLOB); 
    var key = String.fromCharCode(event.keyCode); 
    if(event.keyCode == 8) { 
     keyGLOB = keyGLOB.substring(0, keyGLOB.length -1); 
     return false; 
    } 
    var regex = /^[a-zA-Z0-9]+$/; 
    if(regex.test(key)) { 
     if(regex.test(keyGLOB)) { 
      keyGLOB += key; 
      searchDb(keyGLOB.toLowerCase()); 
     } else { 
      alert('letters and numbers only!'); 
      return false; 
     } 
    } else { 
     alert('letters and numbers only!'); 
     return false; 
    } 
} 

HTML:

<p><input id='product-edit-search' onkeydown='editProductSearch(event)'></p> 
+6

你在对什么进行测试? – Andy

+2

什么是'钥匙'?什么是keyGLOB? –

+3

因为'key'和/或'keyGLOB'包含字母和数字以外的东西吗?没有你的投入,人们应该如何猜测发生了什么? –

回答

5
if(regex.test(keyGLOB)) { 
     keyGLOB += key; 

if语句,keyGLOB仍然是一个空字符串基于它是如何在你的程序,我相信将返回false基于早先定义在你的正则表达式。

+0

就是这样!谢谢,我可以添加到正则表达式,以允许它接受一个空字符串? – user3105607

+0

是的。被触发的'alert'实际上是'if(regex.test(keyGLOB)){'的'else'子句中的一个,而不是外部的那个。看来OP在误认另一个。 – acdcjunior

+2

只需使文本可选:'/^[a-zA-Z0-9] * $ /'('*'而不是'+')。 – acdcjunior