-4

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

这里的挑战是:

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

下面的例子:

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

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

2)它应该转义多个单引号,这些单引号存在于 Value 中(在某些键值对中)。

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

挑战字符串:

{'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'}
4

2 回答 2

0

单引号不是有效的 JSON。如果你通过jsonlint拉你的字符串,它会告诉你。在 PHP 中创建 JSON 字符串的正确方法是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.
}
于 2013-08-16T08:22:55.793 回答
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>
于 2013-08-20T12:19:51.370 回答