- 16-02-2009
GWT :: Полезные советы :: Регулярные выражения (Part 2)
В недавней заметке Вячеслав предложил интересный подход к использованию регулярных выражений в 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 метода:
К JSNI методам можно обращаться как к обычным Java методам. Они могут быть как статическими так и не статическими.public static native void alert(String msg) /*-{
$wnd.alert(msg);
-}*/;
Использование JSNI методов это полезный и мощный технический прием, который, однако, следует применять расчетливо, поскольку JSNI методы плохо оптимизируются компилятором, менее портируемые на другие браузеры и могут послужить причиной мемори ликов.
Используемое в приведенном примере, регулярное выражение не самое удачное, поскольку не покрывает всех кейсов при валидации реальных email адресов, которые могут содержать ip адрес вместо доменного имени, например obiwan@192.1.100.23, obiwan@[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
Regular Expressions (from Netscape JavaScript guide)
Dmitriy Morozov специально для LifeIn
| Комментарии к статье "GWT :: Полезные советы :: Регулярные выражения (Part 2)" (0) |