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

时间:2016-05-23 10:08:47

标签: javascript regex

我有一张带有允许字符的地图,可以输入。

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": "£"
        };

以下是字符串的所有字符:!"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZÄÖÅÉ_éabcdefghijklmnopqrstuvwxyzäö倣和空格。

我正在尝试编写一个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");
        }
    }

A small JS fiddle不适用于太空。知道我做错了吗?

3 个答案:

答案 0 :(得分:2)

您需要使用[]创建一个字符集或类(不要忘记忽略连字符),并使用^$将其包围起来表示整个字符串。您也不需要调用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");
    }
}

答案 1 :(得分:1)

这更紧凑:

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

答案 2 :(得分:1)

确实不需要正则表达式来检查键入的字符是否正常。你唯一需要做的就是;

library(data.table)
d1 <- setDT(d, key = c("V1", "V2"))[CJ(letters[1:n], letters[1:n])][
 V1==V2, value:= 1][, value:= na.omit(value) , .(pmax(V1, V2), pmin(V1, V2))][]
d1
#   V1 V2      value
#1:  a  a  1.0000000
#2:  a  b -0.5604756
#3:  a  c -0.2301775
#4:  b  a -0.5604756
#5:  b  b  1.0000000
#6:  b  c  1.5587083
#7:  c  a -0.2301775
#8:  c  b  1.5587083
#9:  c  c  1.0000000