Imagine that I accept a piece of code from a user and want to just check whether the given string is a valid JS or not? Just from the syntax perspective.
function checkCode(x){
// Logic
}
// returns a boolean, whether 'x' is syntactically right or wrong.
I don't want solutions with eval
, since the whole nodejs process gets in to a syntax error when the given code, 'x' is syntactically wrong.
Don't use eval
that is literally the same as handing over the control of your server to the public internet. Anyone can do anything with your server - delete files, leak files, send spam email and so on. I am shocked that the answer had received 3 upvotes by the time I noticed it.
Just use a Javascript parser like esprima http://esprima.org/
Here is a syntax validator example it can even collect multiple errors: https://github.com/ariya/esprima/blob/master/demo/validate.js#L21-L41
To check a string contains syntactically valid JavaScript without executing it (which would be an incredibly bad idea), you don't need a library, you may use the parser you already have in your JS engine :
try {
new Function(yourString);
// yourString contains syntactically correct JavaScript
} catch(syntaxError) {
// There's an error, you can even display the error to the user
}
Of course this can be done server side.
Check this demonstration
If it's gonna run in the user's browser then you could just eval it there without round-tripping through the server. try/catch
should catch the error. Doing it directly will also give feedback to the user quicker.
I already had some code lying around after an experiment. I modified it slightly and put it in a jsfiddle.
Basically just use try/catch:
try {
eval('Invalid source code');
} catch(e) {
alert('Error: '+e)
}
Perhaps you can try JSLint.
https://github.com/douglascrockford/JSLint
It's a little bit heavy but it work well.