SORU
6 NİSAN 2010, Salı


Düzenli JSON doğrulamak için

Bana json doğrulamak için izin veren bir Düzenli ifade için arıyorum.

Bu Düzenli ifade için çok yeni ve ben yeterince biliyorum Düzenli ifade ile ayrıştırma kötü olduğunu ama doğrulamak için kullanılabilir mi?

CEVAP
2 EKİM 2010, CUMARTESİ


(Bu normal ifadenin kanıtlanması--muhaliflere-yanlış Bakanlığından mı getirildi.)

Evet, tam düzenli bir doğrulama mümkün.

En modern düzenli uygulamaları tam JSON seri hale getirilmiş bir yapı ve kontrol edebilirsiniz özyinelemeli regexpressions için izin verir. json.org specification oldukça basit hale getirir.

$pcre_regex = '
  /
  (?(DEFINE)
     (?<number>   -? (?= [1-9]|0(?!\d) ) \d  (\.\d )? ([eE] [ -]? \d )? )    
     (?<boolean>   true | false | null )
     (?<string>    " ([^"\\\\]* | \\\\ ["\\\\bfnrt\/] | \\\\ u [0-9a-f]{4} )* " )
     (?<array>     \[  (?:  (?&json)  (?: , (?&json)  )*  )?  \s* \] )
     (?<pair>      \s* (?&string) \s* : (?&json)  )
     (?<object>    \{  (?:  (?&pair)  (?: , (?&pair)  )*  )?  \s* \} )
     (?<json>   \s* (?: (?&number) | (?&boolean) | (?&string) | (?&array) | (?&object) ) \s* )
  )
  \A (?&json) \Z
  /six   
';

PCRE functions PHP ile oldukça iyi çalışır. İş Perl değişmemiş; ve kesinlikle diğer diller için adapte edilebilir. Ayrıca JSON test cases ile başarılı.

Basit RFC4627 doğrulama

Daha basit bir yaklaşım RFC4627, section 6 belirtilen asgari tutarlılık kontrol edin. Güvenlik testi ve non-geçerlilik önlem temel olarak ancak sadece tasarlanmıştır

  var my_JSON_object = !(/[^,:{}\[\]0-9.\- Eaeflnr-u \n\r\t]/.test(
         text.replace(/"(\\.|[^"\\])*"/g, ''))) &&
     eval('('   text   ')');

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • engineerguy

    engineerguy

    10 Ocak 2010
  • Manuel Vizcaino

    Manuel Vizca

    27 Mayıs 2008
  • SavageLuxxxGaming - Daily NBA 2K15 & NBA Live 15 Enjoy And Subscribe!

    SavageLuxxxG

    11 Ocak 2013