Thursday, November 20, 2014

Re: How to use javascript's regular expression by jsni?

"\s" and "\[" (among others) in a JS string are equivalent to "s" and "[", so you have to escape the backslash.
Also, your "escape special characters" is messing with your regexp, turning your [0-9]{1,3} into \[0\-9\]\{1\,3\} (among others) which does not mean the same thing at all.

Or maybe just use a RegExp literal like you do in Firebug?

On Thursday, November 20, 2014 9:07:24 AM UTC+1, Alex Luya wrote:
Sorry,there is typing mistake in my question:the returning type of reEmail() isn't boolean but String,and my code is:
  
         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,}))$";      }-*/;

and it doesn't work.
    

On Thursday, November 20, 2014 3:18:32 PM UTC+8, Alex Luya wrote:

Hello:
     Similar 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("test@domain.com")  

it will give what I want,but If wrapping it to a JSNI method:

    private native boolean 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("test@domain.com",reEmail());  

It will give me false.Please tell what mistakes I have made,thanks.

--
You received this message because you are subscribed to the Google Groups "Google Web Toolkit" group.
To unsubscribe from this group and stop receiving emails from it, send an email to google-web-toolkit+unsubscribe@googlegroups.com.
To post to this group, send email to google-web-toolkit@googlegroups.com.
Visit this group at http://groups.google.com/group/google-web-toolkit.
For more options, visit https://groups.google.com/d/optout.

No comments:

Post a Comment