2

How could a Commando like me check if inputed code is a valid JavaScript source using some JavaScript built-in methods (if any!) or in any other possible way!? (Something like a preparser found in various IDE's like NetBeans, Eclipse, etc)?

I have to check if code is OKAY and then window.eval()-it to the current document instance.

1
  • What do you mean by 'Okay'? whether the code should have correct syntax or should be following coding standards or should not contain malicious code? Commented Aug 18, 2011 at 14:46

3 Answers 3

5

Assuming that your need is to check whether the code will not throw any syntax errors, following is my solution:

var code = "asdfsd = 1";

try {
    (function(){
        new Function(code);
    })()
}
catch(e) {
    alert('error');
}

Working Example: http://jsfiddle.net/5NpGa/

Sign up to request clarification or add additional context in comments.

5 Comments

new Function(string) is eval in disguise.
They have their differences. For example, new Function(str) doesnt affect the variables in the scope. stackoverflow.com/questions/4599857/…
Moreover from what i understood, his need was to check if a code will work, not whether it is following coding practices.
From the OP: "I have to check if code is OKAY and then window.eval()-it".
Be aware that the catch in the proposed solution is going to be triggered only in the case of runtime errors (e.g. variable asdfsd is not defined). But that code is still syntactically valid. asdfsd = 1 1 (note the space between the 1s) is not going to be catched.
1

You could use a lint library like:

http://www.javascriptlint.com/download.htm

EDIT:

Sorry, that's a compiled linter and you're wanting something for on-the-fly. Try jslint: http://jslint.com

3 Comments

how could I include jslint in my current script(s)?
Ah, sorry. I mis-understood. You're wanting to do this in javascript on the fly, right?
The library you linked is not written in JavaScript.
1

You're looking for Crockford's jslint.js. It's the same code that powers http://jslint.com/.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.