在JavaScript中使用Reg exp检查允许的字符

在JavaScript中使用Reg exp检查允许的字符,javascript,regex,Javascript,Regex,我有一个带有允许字符的映射,可以输入 var charMap = { "32": " ", "33": "!", "34": "\"", "35": "#", "36": "$", "37": "%", "38": "&", "39": "'", "40": "(", "41": ")", "42": "*", "43": "+", "44": ",", "45": "-", "46": ".

我有一个带有允许字符的映射,可以输入

var charMap = {
            "32": " ", "33": "!", "34": "\"", "35": "#",
            "36": "$", "37": "%", "38": "&", "39": "'", "40": "(",
            "41": ")", "42": "*", "43": "+", "44": ",", "45": "-",
            "46": ".", "47": "/", "48": "0", "49": "1", "50": "2",
            "51": "3", "52": "4", "53": "5", "54": "6", "55": "7",
            "56": "8", "57": "9", "58": ":", "59": ";", "60": "<",
            "61": "=", "62": ">", "63": "?", "64": "@", "65": "A",
            "66": "B", "67": "C", "68": "D", "69": "E", "70": "F",
            "71": "G", "72": "H", "73": "I", "74": "J", "75": "K",
            "76": "L", "77": "M", "78": "N", "79": "O", "80": "P",
            "81": "Q", "82": "R", "83": "S", "84": "T", "85": "U",
            "86": "V", "87": "W", "88": "X", "89": "Y", "90": "Z",
            "91": "Ä", "92": "Ö", "93": "Å", "94": "É", "95": "_",
            "96": "é", "97": "a", "98": "b", "99": "c", "100": "d",
            "101": "e", "102": "f", "103": "g", "104": "h", "105": "i",
            "106": "j", "107": "k", "108": "l", "109": "m", "110": "n",
            "111": "o", "112": "p", "113": "q", "114": "r", "115": "s",
            "116": "t", "117": "u", "118": "v", "119": "w", "120": "x",
            "121": "y", "122": "z", "123": "ä", "124": "ö", "125": "å",
            "126": "€", "127": "£"
        };
var charMap={
"32": " ", "33": "!", "34": "\"", "35": "#",
"36": "$", "37": "%", "38": "&", "39": "'", "40": "(",
"41": ")", "42": "*", "43": "+", "44": ",", "45": "-",
"46": ".", "47": "/", "48": "0", "49": "1", "50": "2",
"51": "3", "52": "4", "53": "5", "54": "6", "55": "7",
“56”:“8”、“57”:“9”、“58”:”、“59”:”、“60”:”、“63”:”、“64”:“@”、“65”:“A”,
“66”:“B”,“67”:“C”,“68”:“D”,“69”:“E”,“70”:“F”,
“71”:“G”,“72”:“H”,“73”:“I”,“74”:“J”,“75”:“K”,
“76”:“L”,“77”:“M”,“78”:“N”,“79”:“O”,“80”:“P”,
“81”:“Q”,“82”:“R”,“83”:“S”,“84”:“T”,“85”:“U”,
“86”:“V”,“87”:“W”,“88”:“X”,“89”:“Y”,“90”:“Z”,
"91": "Ä", "92": "Ö", "93": "Å", "94": "É", "95": "_",
“96”:“é”,“97”:“a”,“98”:“b”,“99”:“c”,“100”:“d”,
“101”:“e”,“102”:“f”,“103”:“g”,“104”:“h”,“105”:“i”,
“106”:“j”,“107”:“k”,“108”:“l”,“109”:“m”,“110”:“n”,
“111”:“o”,“112”:“p”,“113”:“q”,“114”:“r”,“115”:“s”,
“116”:“t”,“117”:“u”,“118”:“v”,“119”:“w”,“120”:“x”,
“121”:“y”,“122”:“z”,“123”:“ä”,“124”:“ö”,“125”:“å”,
"126": "€", "127": "£"
};
以下是字符串形式的所有字符:
!“#$%&'()*+,-./0123456789:@和一个空格

我正在尝试编写一个reg exp测试,但是我的代码对于任何输入都会返回false(我猜我搞错了一些转义字符。这是我的代码:

var checkAllCharachters = function (str) {
        var allowedCharacters = new RegExp(/^[!"#$%&'\(\)\*+,\-.\/\d:;<=>?@\\sA-ZÄÖÅÉ_éa-zäö倣\\n]*$/);

        if(allowedCharacters.test(str)){
            console.log("contained characters thats not allowed");
        }
    }
var checkAllCharachters=函数(str){
var allowedCharacters=new RegExp(/^[!“$%”和“\(\)\*+,\-.\/\d:;?@\\sA-ZÄÉa-Zääa-Zån]*$/);
if(允许字符测试(str)){
log(“包含不允许的字符”);
}
}

不使用空格。知道我做错了什么吗?

您需要使用
[
]
创建一个字符集或类(不要忘记转义连字符)并用
^
$
包围它以表示整个字符串。您也不需要调用
RegExp
构造函数,因为您有一个文本。您还需要说0或更多或1或更多

var checkAllCharachters = function (str) {
    var allowedCharacters = /^[!"#$%&'\(\)\*+,\-.\/\d:;<=>?@A-ZÄÖÅÉ_éa-zäö倣 ]*$/g;
    if(allowedCharacters.test(str)){
        console.log("contained characters thats not allowed");
    }
}
var checkAllCharachters=函数(str){
var allowedCharacters=/^[!“\$%”和“\(\)\*+,\-.\/\d:;?@A-ZÄÉÉA-Zäö229;€]*$/g;
if(允许字符测试(str)){
log(“包含不允许的字符”);
}
}

您需要使用
[
]
创建一个字符集或类(不要忘记转义连字符)并用
^
$
包围它以表示整个字符串。您也不需要调用
RegExp
构造函数,因为您有一个文本。您还需要说0或更多或1或更多

var checkAllCharachters = function (str) {
    var allowedCharacters = /^[!"#$%&'\(\)\*+,\-.\/\d:;<=>?@A-ZÄÖÅÉ_éa-zäö倣 ]*$/g;
    if(allowedCharacters.test(str)){
        console.log("contained characters thats not allowed");
    }
}
var checkAllCharachters=函数(str){
var allowedCharacters=/^[!“\$%”和“\(\)\*+,\-.\/\d:;?@A-ZÄÉÉA-Zäö229;€]*$/g;
if(允许字符测试(str)){
log(“包含不允许的字符”);
}
}
这更紧凑:

[!"#$%&'()*+,-./0-9:;<=>?@A-ZÄÖÅÉ_éa-zäö倣]
[!”#$%和'()*+,-./0-9:;?@A-ZÄÉA-Zåå)
这更紧凑:

[!"#$%&'()*+,-./0-9:;<=>?@A-ZÄÖÅÉ_éa-zäö倣]
[!”#$%和'()*+,-./0-9:;?@A-ZÄÉA-Zåå)

检查键入的字符是否正确并不需要正则表达式。您需要做的唯一一件事是

document.onkeypress = function(evt) {
  var charCode = evt.keyCode || evt.which,
          char = String.fromCharCode(charCode),
      passList = "!\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZÄÖÅÉ_éabcdefghijklmnopqrstuvwxyzäö倣";
  !!~passList.indexOf(char) && do something;
};
document.onkeypress=函数(evt){
var charCode=evt.keyCode | | evt.which,
char=String.fromCharCode(charCode),
passList=“!\”$%和“()*+,-./0123456789:;?@abcdefghjjklmnopqrstuvxyzÄÉÉéabcdefghjjklmnopqrstuvxyzå”;
!!~ passList.indexOf(char)&做点什么;
};

检查键入的字符是否正确并不需要正则表达式。您需要做的唯一一件事是

document.onkeypress = function(evt) {
  var charCode = evt.keyCode || evt.which,
          char = String.fromCharCode(charCode),
      passList = "!\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZÄÖÅÉ_éabcdefghijklmnopqrstuvwxyzäö倣";
  !!~passList.indexOf(char) && do something;
};
document.onkeypress=函数(evt){
var charCode=evt.keyCode | | evt.which,
char=String.fromCharCode(charCode),
passList=“!\”$%和“()*+,-./0123456789:;?@abcdefghjjklmnopqrstuvxyzÄÉÉéabcdefghjjklmnopqrstuvxyzå”;
!!~ passList.indexOf(char)&做点什么;
};

我第一眼看到的是
$
,应该将其转义,否则它将被视为行尾。而且,您还需要将所有内容都包含在方括号内
[…]
。您未能创建一个cahracter类。请将所有内容都放在
[…]内
,在其后面添加一个
*
,删除
g
,用
^
$
将图案括起来。在字符类中转义连字符。然后删除
新的RegExp()
,只需使用正则表达式文字符号。顺便说一句,您没有转义的是
-它匹配任何字符。但是@Wiktor是对的,您只检查完整的字符串。空格不起作用?我第一眼看到的是
$
,应该转义,否则它将被视为行尾。而且,您还需要将所有内容都包含在方括号中。您未能创建一个字符类。请将所有内容放入
[…]
,在其后面添加一个
*
,删除
g
,将模式用
^
$
括起来。在字符类中转义连字符。并删除
new RegExp()
,只需使用正则表达式文字符号。顺便说一句,您没有转义的是
-它匹配任何字符。但是@Wiktor是对的,您只检查完整的字符串。空格不起作用?而且,如果没有量词,它将只匹配1个字符字符串。而
/g
测试将生成一个字符此外,如果没有量词,它将只匹配1个字符字符串