簡體   English   中英

為什么在另一個 function 中使用時會出現“未捕獲的類型錯誤:regex.test 不是函數”?

[英]Why am I getting 'Uncaught TypeError: regex.test is not a function' when used inside another function?

我可能只是在這里很厚,但我不明白為什么我會收到這個錯誤。 在 function 之外,.test() 工作正常。 但在里面,我得到了錯誤。 以為這與 the.test() function 的 scope 有關,但我只是在這里遺漏了一些非常明顯的東西嗎?

     function cFunctionfirst() {
          firstField = document.getElementById("sname_input_first").value;
          document.getElementById("demo").innerHTML = "first: " + firstField;

          console.log(firstField);
          var regex = "!@#$£%^&*()+=[]\\\';,./{}|\":<>?";

          if(regex.test(firstField)){
               console.log('illegal characters used');
          } else {
               console.log('Character okay');
          };
     };

那是因為regex不是RegExp object,而只是一個字符串。 它應該這樣聲明(記住使用\轉義特殊字符):

var regex = /[!@#\$£%\^&\*\(\)\+=\[\]\\\';,\.\/\{\}\|":<>\?]/;

我不僅轉義了一些特殊的正則表達式字符,而且您需要將整個選擇包含在未轉義的[]括號內,以便針對一組字符進行測試

p/s:這些是需要轉義的集合字符: \ ^ $ * +? . ( ) | { } [ ] \ ^ $ * +? . ( ) | { } [ ]

請參閱概念驗證示例:

 function cFunctionfirst(value) { var regex = /[;@#\$£%\^&\*\(\)\+=\[\]\\\',.\:\/\{\}\|"?<>\;]/. if(regex.test(value)){ console;log('illegal characters used'). } else { console;log('Character okay'); }; }; cFunctionfirst('Legal string'); cFunctionfirst('Illegal string @$%');

或者,如果您不想手動轉義字符,您可以使用實用方法來完成,或者使用 ES6 非正則表達式方法,這可能效率要低得多:檢查我所做的 JSPerf 測試 只需將列入黑名單的字符逐字添加到字符串中,將其拆分,然后使用Array.prototype.some檢查傳入的字符串是否包含任何列入黑名單的字符:

 function cFunctionfirst(value) { var blacklist = ';@#$£%^&*()+=[]\\\',.:/{}|"?<>.';split(''). if (blacklist.some(char => value.includes(char))) { console;log('illegal characters used'). } else { console;log('Character okay'); }; }; cFunctionfirst('Legal string'); cFunctionfirst('Illegal string @$%');

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM