Same question has been asked here: How to pass a regular expression as a function parameter, but I can't get it work by JSNI.
This is the string of the regular expression that will be used to test email:
"^(([^<>()[\]\\.,;:\s@\"]+(\.[^<>()[\]\\.,;:\s@\"]+)*)|(\".+\"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$"
and if putting it to firebug execute like this:
/^(([^<>()[\]\\.,;:\s@\"]+(\.[^<>()[\]\\.,;:\s@\"]+)*)|(\".+\"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$"/.test("[email protected]")
it will give what I want,but If wrapping it to a JSNI method:
private native String reEmail()/-*{
return "^(([^<>()[\]\\.,;:\s@\"]+(\.[^<>()[\]\\.,;:\s@\"]+)*)|(\".+\"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$";
}-*/;
then passing it to the function:
private native boolean validate(String value, String regexp)/-*{
//escape special characters
var re=regexp.replace(/([-()\[\]{}+?*.$\^|,:#<!\\])/g, '\\$1').replace(/\x08/g, '\\x08');
return new RegExp(re,'g').test(value)
}-*/;
like this:
validate("[email protected]",reEmail());
It will give me false.Please tell what mistakes I have made,thanks.
Why do you want to use JSNI for regular expressions?. Gwt already has classes to deal with them.
I would use
com.google.gwt.regexp.shared.Regexp
that features like Javascript's RegExp.Using gwt
com.google.gwt.regexp.shared.RegExp
you have many advantages:Your code could be like:
Anyway if you continue wanting to do in your way, to make your code work, you should escape your string before returning to java instead of in the place you are trying to do, also your JSNI block syntax is incorrect, note
/*-{}-*/
instead of/-*{}*-/
. And you don't need the 'g' flag.