在JSON中指定正则表达式字符串,在JavaScript和PHP中使用

Specify regex string in JSON, use it in JavaScript and PHP

本文关键字:PHP JavaScript 字符串 JSON 正则表达式      更新时间:2024-04-03

我的JSON文件中有这个条目:

{
    "rules": [
        {
            "field": "ingame",
            "rules": [
                {
                    "condition": "minLength",
                    "argument": 1,
                    "php": false
                },
                {
                    "condition": "maxLength",
                    "argument": 24,
                    "php": false
                },
                {
                    "condition": "zeroRows",
                    "argument": "SELECT * FROM users WHERE ingame = ?",
                    "php": true
                },
                {
                    "condition": "regexCheck",
                    "argument": "[a-zA-Z0-9_''('')]{1-24}",
                    "php": false
                }
            ]
        }
    ]
}

根据在线解析器,它是正确的JSON

我对"condition": "regexCheck"下的特定regex的意思是:一个由1-24个符号组成的字符串,这些符号要么是a-z,要么是A-Z,要么是0-9,或者是_,或者是(或是)

我如何在JavaScript:中应用它

function checkRule(condition, argument, value) {
    var pass = false;
    var errormessage = "";
    switch (condition) {
        case "regexCheck":
            pass = value.match(new RegExp(argument));
            if (!pass) {
                errormessage = "Not in expected format";
            }
            break;
    }
    return {
        pass: pass,
        errormessage: errormessage
    };
}

然而,regex似乎不起作用,当检查RegExp对象时,我看到以下内容:[a-zA-Z0-9_'(')]{1-24}

有人知道它出了什么问题吗

此外,在PHP中,我使用以下内容:

function checkRules($rules, $name, $value) {
    $pass = false;
    $errormessage = "";
    if (file_exists("../rules/{$rules}.json")) {
        $rules = json_decode(file_get_contents("../rules/{$rules}.json", true));
        foreach ($rules->rules as $fvalue) {
            if ($fvalue->field == $name) {
                foreach ($fvalue->rules as $ruleset) {
                    switch ($ruleset->condition) {
                        case "regexCheck":
                            $pass = preg_match($ruleset->argument, $value);
                            if (!$pass) {
                                $errormessage = "Not in expected format";
                            }
                            break;
                    }
                    if (!$pass) {
                        break;
                    }
                }
                break;
            }
            else {
                $pass = true;
                $errormessage = "";
            }
        }
    }
    else {
        $pass = false;
        $errormessage = "Internal error";
    }
    return array($pass, $errormessage);
}

不能在量词中使用连字符。您有{1-24}

更改为{1,24}

还要注意,检查RegExp时返回的regex是正确的,因为'是JSON中的保留转义符。