// Функция валидации JSON принимает текстовую строку
// и возвращает true, если текст является валидным JSON
// или возвращает false, если текст является невалидным JSON
function validateJSON (text) {
text = '' + text;
// Заменяем опасные символы в формате Unicode на их escape-последовательности.
var dangerousSymbolsPattern = /[\u0000\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g;
dangerousSymbolsPattern.lastIndex = 0;
if (dangerousSymbolsPattern.test(text)) {
text = text.replace(dangerousSymbolsPattern, function (char) {
return '\\u' + ('0000' + char.charCodeAt(0).toString(16)).slice(-4);
});
}
text = text.replace(/\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g, '@') // заменяем все символы переноса строки, табы или символы в формате Unicode на символ @
.replace(/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g, ']') // заменяем простые значения токенов типа true, false, null на символ ]
.replace(/(?:^|:|,)(?:\s*\[)+/g, ''); // удаляем все открывающие скобки ( и [ в начале строки или следующие за двоеточием и запятой
if (/^[\],:{}\s]*$/.test(text)) { // проверим являются ли оставшиеся символы только символами: ],:{}
return true;
} else {
return false;
}
}
console.log(validateJSON('{"one": 1}'));
Комментариев нет:
Отправить комментарий