check json validity : try/catch vs regex (v4)

Revision 4 of this benchmark created by Object vs Array Key Value on


Setup

var jsonParseIfValid = function(str) {
     var testStr = str.replace(/\\./g, '@').replace(/"[^"\\\n\r]*"/g, '');
     var isValid = (/^[,:{}\[\]0-9.\-+Eaeflnr-u \n\r\t]*$/.test(testStr));
     if(isValid) { return JSON.parse(str); }
     else { return false; }
    }
    
    var jsonParseIfValid2 = function (str) {
      var returnState;
      try {
        returnState = JSON.parse(text);
        return true;
      } catch (e) {    
       returnState = false;
      }
      finally { 
       return returnState; 
      } 
    }

Test runner

Ready to run.

Testing in
TestOps/sec
Regex validation
var text_valid = '{"a":"obja","b":[0,1,2],"c":{"d":"some object"}}';
var text_invalid = '{"a":"obja""b":[0,1,2],"c":{"d":"some object"}}';
var valid = jsonParseIfValid(text_valid);
var invalid = jsonParseIfValid(text_invalid);
ready
Try/Catch validation
var text_valid = '{"a":"obja","b":[0,1,2],"c":{"d":"some object"}}';
var text_invalid = '{"a":"obja""b":[0,1,2],"c":{"d":"some object"}}';
var valid = jsonParseIfValid2(text_valid);
var invalid = jsonParseIfValid2(text_invalid);
ready

Revisions

You can edit these tests or add more tests to this page by appending /edit to the URL.