需要验证的字符串采用以下格式,该格式不是严格的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"}
有效
答案 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 *)* $