正则表达式,用于检测和转义多个单引号,而不是由JSON保留

时间:2013-08-16 08:07:40

标签: regex json

我希望有一些正则表达式可以使用双黑色斜杠(\\)检测并转义多个单引号。例如,如果有',那么它应该变为\\'

这里的挑战是:

1)它不应该逃避JSON使用的那些单引号。

以下示例:

{'Key1':'Value1','Key2':'Value2'}

它不应该逃避覆盖键和值的单引号。在上面的示例中,没有引号应该被转义。 应该转义值内的任何单引号。

2)它应该转义在Value内部存在的MULTIPLE单引号(在某些键值对中)。

以下是可以用作示例的挑战字符串:

挑战字符串:

{'AddressUsageId':''asd'','Edit':'Edit','SiteUsage':'Bi'llTo','PaymentTerm':'asd','SalesPerson':'S'A@,#$'%^''&*'()<>?`~','Language':'','PrimaryUsage':''''','InternalLocation':'T'est'}

它应该如下所示进行转义:

{'AddressUsageId':'\'asd\'','Edit':'Edit','SiteUsage':'Bi\'llTo','PaymentTerm':'asd','SalesPerson':'S\'A@,#$\'%^\'\'&*\'()<>?`~','Language':'','PrimaryUsage':'\'\'\'','InternalLocation':'T\'est'}

2 个答案:

答案 0 :(得分:0)

单引号是 NOT 有效的JSON。如果你将字符串拉过jsonlint,它会告诉你。在PHP中生成JSON字符串的正确方法是在Array或Object上使用json_encode()。如果需要转义,这将自动转义引号。

就你的问题而言。使用以下伪代码:

$s = $json_string without first 2 and last 2 characters
#$a is array of "key':'value"
$a = explode( $s, "','" );

foreach( $a as $i => $keyvalue ) {
  $temp = explode( $keyvalue, "':'" );

  #Now replace all instances of ' with \'
  $temp = str_replace( "'", "\'", $temp );

  #Now do something fancy to stitch everything back together.
}

答案 1 :(得分:0)

            <script> 
            function removeSingleQuotesFromJSON(str)
            { 
            var array = str.split(''); 
            var strLength = str.length; 
            var resultStr= ""; 
            for(var i=0; i<strLength; i++)
            { 
            if(i>0)
            {
             if(array[i] == "'" && array[i-1] != "{" && array[i+1] != "}" && array[i+1] != ":" && array[i-1] != ":" && !(array[i+1] == "," && array[i+2] == "'") && !(array[i-1] == "," && array[i-2] == "'")) 
                     { 
                        resultStr+="\\" ;
                     } 
             } 
             resultStr+=""+array[i]; 
             } 
              return resultStr;
             } </script>