Java / Статьи / Главная страница
16-02-2009

GWT :: Полезные советы :: Регулярные выражения (Part 2)

Как известно, в результате компиляции GWT код транслируется в обычный JavaScript, который, начиная с версии 1.2, предоставляет схожий с Perl механизм работы с регулярными выражениями. Периодически при разработке GWT приложения, появляется необходимость использовать возможности JavaScript. JSNI (JavaScript Native Interface) позволяет нам использовать этот мощный скриптовый язык в контексте GWT приложения. Ниже приведен пример использования JSNI метода для проверки валидности email адреса.

В недавней заметке Вячеслав предложил интересный подход к использованию регулярных выражений в GWT. Я хочу предложить еще один. :)
Как известно, в результате компиляции GWT код транслируется в обычный JavaScript, который, начиная с версии 1.2, предоставляет схожий с Perl механизм работы с регулярными выражениями. Периодически при разработке GWT приложения, появляется необходимость использовать возможности JavaScript. JSNI (JavaScript Native Interface) позволяет нам использовать этот мощный скриптовый язык в контексте GWT приложения. Ниже приведен пример использования JSNI метода для проверки валидности email адреса.
package org.foobar.client;
import ...;
public class JsniExample implements EntryPoint {
 private static final String EMAIL_ADDRESS_IS_INVALID =
  "Incorrect mail address! Please try again.";
 private static final String EMAIL_ADDRESS_IS_VALID =
  "EMail address is valid";
 /**
  * This is the entry point method.
  */
 public void onModuleLoad() {
  HorizontalPanel hPanel = new HorizontalPanel();
  final TextBox mailBox = new TextBox();
  Button validateMailBtn = new Button("Validate");
  validateMailBtn.addClickListener(new ClickListener() {
   public void onClick(Widget sender) {
    if (!validateEmail(mailBox.getText())) {
     Window.alert(EMAIL_ADDRESS_IS_INVALID);
    } else {
     Window.alert(EMAIL_ADDRESS_IS_VALID);
    }
   }
  });
  Label mailBoxLabel = new Label("e-mail");
  hPanel.add(mailBox);
  hPanel.add(mailBoxLabel);
  RootPanel.get().add(hPanel);
  RootPanel.get().add(validateMailBtn);
 }
 public native boolean validateEmail(String mail) /*-{
  var pattern =
   /^([a-zA-Z0-9_\.\-])+@(([a-zA-Z0-9\-])+\.)+([a-zA-Z0-9]{2,4})+$/;
  return pattern.test(mail);
 }-*/;
}
 
Обратите внимание на метод  validateEmail. JSNI методы объявляются со модификатором native и содержат JavaScript код в заккомментированном блоке определенного формата.

Пример JSNI метода:
public static native void alert(String msg) /*-{
    $wnd.alert(msg);
-}*/;
К JSNI методам можно обращаться как к обычным Java методам. Они  могут быть как статическими так и не статическими.
Использование JSNI методов это полезный и мощный технический прием, который, однако, следует применять расчетливо, поскольку JSNI методы плохо оптимизируются компилятором, менее портируемые на другие браузеры и могут послужить причиной мемори ликов.

Используемое в приведенном примере, регулярное выражение не самое удачное, поскольку не покрывает всех кейсов при валидации реальных email адресов, которые могут содержать ip адрес вместо доменного имени, например obiwan@192.1.100.23obiwan@[192.1.100.23] или даже "Obiwan Kenobi"@[192.1.100.23]
Надеюсь эта заметка была вам интересна.

Рекомендуемые ресурсы:

GWT Developer's Guide: JavaScript Native Interface (JSNI)

Getting to really know GWT, Part1: JSNI

Using JSNI in GWT

Regular Expressions (from Netscape JavaScript guide)

Dmitriy Morozov специально для LifeIn


Комментарии к статье "GWT :: Полезные советы :: Регулярные выражения (Part 2)" (0)



Вам есть, что сказать?




  Введите код