2011-07-15 209 views
4

我有以下代碼的jsfiddle:RegExp.Test總是返回false

http://jsfiddle.net/ACG2D/

$(document).ready(function() { 
    $('.testThis').click(function() { 
     $('.regexValidation').each(function() { 
      if ($(this).val() != "" || $(this).val() != null) { 
       // Check the regex 
       var expression = new RegExp('/^[0-9a-z_]+$/i'); 
       var myVal = $(this).val(); 
       if (expression.test(myVal) == true) { 
        // All is okay 
        alert("OK"); 
       } else { 
        alert("Error"); 
       } 
      } 
     }); 
    });  
}); 

預期的計劃是隻讓字母數字和下劃線通過。禁止空格和標點符號等

我不明白爲什麼會出錯,但它總是返回false爲測試。

回答

8

您的語法錯誤。

將其更改爲var expression = /^[0-9a-z_]+$/i;

與PHP,Java腳本支持正則表達式文字語法/.../創建RegExp對象。

構造函數RegExp將正則表達式作爲一個字符串,不帶分隔符。
因此,你也可以寫new RegExp('^[0-9a-z_]+$', 'i')

+0

嗯..你每天學習新的東西!我認爲缺乏引號會導致JS拋出錯誤,但顯然不是。感謝您的回答和解釋。 – Dave

4

從你的正則表達式刪除報價:

var expression = new RegExp(/^[0-9a-z_]+$/i); 
1

取出報價如下:new RegExp(/^[0-9a-z_]+$/i);

+0

@Igor Dymov和@Mrchief:使用'new RegExp(/ /)'而不是'/ /'有什麼好處嗎? – pimvdb

0

用斜槓「/」,而不是報價,在開始和正則表達式的結尾。

爲您的代碼,它應該是這樣的 -

var expression = new RegExp('/^[0-9a-z_]+$/i');