2017-04-19 17 views
0

検証が必要な文字列は、厳密にはJSONではないため、PHPのJSONエンコード処理では検証できません。キーの%%が必要であることに注意してください。REGEX任意の1文字を使用したJSONスタイルの文字列

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

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

電流REGEXが正常上記ため検証:

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

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

無効例(第2の値の前後に引用符):https://regex101.com/r/4y1uEu/2


値を理想的には追加の文字をサポートする必要があるhttps://regex101.com/r/4y1uEu/3


I:偽陽性の

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

例:任意の文字は、私は

所望のパターンと一致していません。この文字列の一致した
\{"%%[a-zA-Z0-9]+%%":".+"(?:,"%%[a-zA-Z0-9]+%%":".+")*} 

にREGEXを変更しました理由は新しい "任意の文字"がこのために使用されていると信じている全セクション: { "こんにちは%% %%": "世界を"、 "%% FOO %%":バー「}


がどのように私は何とか作ることができる "任意の文字" 最後にマッチしますか?引用符自体が「任意の文字」であるため、このメソッドは失敗するでしょうか?予想される結果の


いくつかの例:

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

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

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

{"%%hello%%":"world lo-rem","%%foo%%":"lorem "ipsum" dolor"}有効

+1

これは引用符 'lorem "ipsum" dolor "'内のエスケープされていない引用符を除いてはかなり簡単でしょう無効なJSONを保存するのはなぜですか? – AbraCadaver

+0

'\ {" %% [a-zA-Z0-9] + %% ":" [^ "] +"(?:、 "%% [a-zA-Z0-9] + %%": "[^"] + ") * \} ' – splash58

+1

'は値の部分に「すべて許可」、引用符はエスケープされていない、{" %% hello %% ":" world "、" %% foo %% ":bar"}は1で有効ですkey = "%% hello %%"とvalue = "world"、 "%% foo %%":bar "としてください。これを避ける最も簡単な方法は、 '、'または '%'値の部分で、または他のものがある間にその値が無効である理由をより明確に定義する必要があります。 – Tezra

答えて

-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( 、|})\ s *)* $

関連する問題