使用任何单个字符REGEX JSON样式字符串

时间:2017-04-19 18:23:50

标签: php json regex string validation

需要验证的字符串采用以下格式,该格式不是严格的JSON,并且无法使用PHP的JSON编码过程进行验证。请注意,密钥中的%%是必需的。

protected void Submit_Click(object sender, EventArgs e)
    {
        if (Message.Text != null)
        {
            HtmlGenericControl post = new HtmlGenericControl("div");
            HtmlGenericControl message = new HtmlGenericControl("p");
            message.InnerText = Message.Text;
            post.Controls.Add(message);
        }
        else
        {

        }
    }

当前的REGEX成功验证了上述内容:

// As a single pair
{"%%key%%":"value"}

// Or comma delimited pairs
{"%%key%%":"value","%%key 2%%":"value 2", ...etc...}

有效示例:https://regex101.com/r/4y1uEu/1

无效示例(第二个值没有引号):https://regex101.com/r/4y1uEu/2

值需要支持其他字符,理想情况下是任何字符,所以我将REGEX更改为

\{"%%[a-zA-Z0-9]+%%":"[a-zA-Z0-9 ]+"(?:,"%%[a-zA-Z0-9]+%%":"[a-zA-Z0-9 ]+")*}

哪个匹配此字符串与所需模式不匹配:

\{"%%[a-zA-Z0-9]+%%":".+"(?:,"%%[a-zA-Z0-9]+%%":".+")*}

误报示例:https://regex101.com/r/4y1uEu/3

我相信理由是新的&#34;任何角色&#34;正在用于 整个部分: {&#34; %%你好%%&#34;:&#34;的 世界&#34;&#34; %% FOO %%&#34;:巴 < /强>&#34;}

我怎样才能以任何方式制作&#34;任何角色&#34;匹配结束?这种方法注定要失败,因为引用本身是&#34;任何字符&#34;?

预期结果的一些例子:

{"%%hello%%":"world","%%foo%%":bar"} ^ missing quote 有效

{"%%hello%%":"world","%%foo%%":"bar"}有效

{"%%hello%%":"world lorem","%%foo%%":"bar ipsum"}有效

{"%%hello%%":"world lo-rem","%%foo%%":"bar ips'um"}有效

1 个答案:

答案 0 :(得分:-1)

var pattern = /^{("%%[a-zA-Z0-9]+%%":"([A-z0-9\s\\"'-])*"\s*(,|})\s*)*$/
str = "{\"%%hello%%\":\"world lo-rem\",\"%%foo%%\":\"lorem \"ipsum\" dolor\"}"
console.log(str+ ' '+pattern.test(str))
str = "{\"%%hello%%\":\"world lo-rem\",\"%%foo%%\":\"bar ips'um\"}"
console.log(str+ ' '+pattern.test(str))
str = "{\"%%hello%%\":\"world\",\"%%foo%%\":bar\"}"
console.log(str+ ' '+pattern.test(str))
str = "{\"%%hello%%\":\"world\",\"%%foo%%\":bar}"
console.log(str+ ' '+pattern.test(str))

使用有效密钥的规则并在值字符串中扩展有效值,这应该适合您的要求。

^ {( “%% [A-ZA-Z0-9] + %%”: “([A-Z0-9 \ S \\”' - ])“\ S (,|})\ S *)* $

对于JSON转义“版本......

^ {( “%% [A-ZA-Z0-9] + %%”:“([A-Z0-9 \ S \\' - ] | \\ ”)的“ \ S < / em>的(,|})\ S *)* $