I think I figured out the problem, using an online regex tester for
JavaScript: http://www.pagecolumn.com/tool/regtest.htm

Note that the regex translation in JavaScript has a double backslash
to escape the \d special character.  This fails standard regex test
for JavaScript for inputs like abcd1234.

^(?=.*\\d)(?=.*[a-z]).{8,15}$

If you replace the regex text with:

^(?=.*\d)(?=.*[a-z]).{8,15}$

Then it works for JavaScript.  However, Java requires the character to
be escaped.  I'm guessing Firefox simply interprets \\d as \d, which
is why it passes, but IE is not as forgiving.  This seems like a bug
in the GWT compiler.  It seems to me it should take the \\d and
translate it to \d when compiling from Java to JavaScript.

Can someone confirm?

Regards,
Davis

On Aug 14, 9:44 am, davis <[email protected]> wrote:
> Hi, I have the following Java code to validate a password box.
> Basically it checks that the password can't be null, is between 8-15
> characters, and must contain both numbers and letters.
>
> public static boolean validatePassword(PasswordTextBox box, Label
> errorLabel) {
>                 String text = box.getText();
>                 if(text.isEmpty()) {
>                         ValidatorUtil.onFailure(box, 
> custom.passwordMayNotBeNull(),
> errorLabel);
>                         return false;
>                 } if(text.length() < 8 || text.length() > 15) {
>                         ValidatorUtil.onFailure(box, 
> custom.passwordHasInvalidLength(8, 15,
> text.length()), errorLabel);
>                         return false;
>                 } if(!text.matches(CustomMessages.REGEX_PASSWORD)) {
>                         ValidatorUtil.onFailure(box, 
> custom.passwordHasInvalidFormat(),
> errorLabel);
>                         return false;
>                 }
>                 return true;
>         }
>
> This works fine in Firefox, but it does not work in IE.  The
> JavaScript compiles down to this for IE8:
>
> function validatePassword(box, errorLabel){
>   var text, matchObj;
>   text = $getPropertyString(box.element, 'value');
>   if (!text.length) {
>     setStyleName(box.element, 'validationFailedBorder', true);
>     ($clinit_114() , errorLabel.element).innerText = 'You must provide
> a password.';
>     return false;
>   }
>   if (text.length < 8 || text.length > 15) {
>     onFailure_1(box, 'Sorry, your password must be between 8 and 15
> characters long (you have ' + text.length + ' characters).',
> errorLabel);
>     return false;
>   }
>   if (!(matchObj = (new RegExp('^(?=.*\\d)(?=.*[a-z]).{8,15}$')).exec
> (text) , matchObj == null?false:text == matchObj[0])) {
>     setStyleName(box.element, 'validationFailedBorder', true);
>     ($clinit_114() , errorLabel.element).innerText = 'Sorry, your
> password must contain both letters [a-z] and numbers [0-9].';
>     return false;
>   }
>   return true;
>
> }
>
> The behavior is a bit odd.  It passes the text.length checks, but then
> fails the regex expression (which also has length checks with {8,15}.
> It always prints: 'Sorry, your password must contain both letters [a-
> z] and numbers [0-9].' in IE, but in Firefox, it works fine...for
> inputs like this:
>
> abcd1234 <- valid password, 8 characters with letters and numbers
>
> Even more strange is the fact that if I enter a password with 12
> characters with both letters and numbers, IE passes, like this:
>
> abcd1234abcd
>
> But if I enter only 11 characters, it fails:
>
> abcd1234abc
>
> Any clues on what is wrong here?
>
> Regards,
> Davis
--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups 
"Google Web Toolkit" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to 
[email protected]
For more options, visit this group at 
http://groups.google.com/group/Google-Web-Toolkit?hl=en
-~----------~----~----~----~------~----~------~--~---

Reply via email to