Регулярные выражения в JavaScript
Продолжая тему регулярных выражений (см. mtaalamu.ru/blog/coding/1083.html, mtaalamu.ru/blog/coding/1083.html), несколько слов хотелось бы сказать о том, как они используются в популярнейшем языке программирования клиентских приложений. На JavaScript я программирую довольно редки и не много, т.к. GWT, на котором я разрабатываю веб-странички, позволяет обходиться без него. Но на днях потребовалось решить такую задачу.
Тот самый случай, когда «фильтровать базар» лучше всего именно рекэкспами. Однако приложение я, как всегда, стал писать на GWT, а в нем нет непосредственной поддержки регулярных выражений (а может и есть, но так глубоко закопана, что я об этом не знаю). Зато, как подсказал всемогущий Google, непосредственная поддержка регэкспов есть в стандартном JavaScript. С некоторых пор там предусмотрен специальный объект — RegExp, которым можно пользоваться примерно так:
Но это еще не всё. Как видно из примера, слэши и некоторые другие спецсимволы в строках Java(Script) требуют экранирования. Чтобы сделать этот жуткий лес из палок прозрачнее, в JS придумали более эффективную форму записи регэкспов, заключая их не в кавычки, а в косые черточки. Вот, например, как в этой форме выглядит решение вышесформулированной задачи:
Очень удобно, мне понравилось. Поскольку GWT поддерживает native-методы, написанные непосредственно на JS, я легко интегрировал этот код в свое приложение.
В текстовое поле вводится строка для поиска (поиск карточки пациента поликлиники в базе данных). Строка может быть 5-значным числом, специальным идентификатором (три буквы + две цифры) либо фрагментом слова кириллицей. Требуется отфильтровать ввод в это поле, чтобы формой обрабатывался только введенный текст, соответствующий одному из этих условий, а в остальных случаях выводилось сообщение об ошибке.
Тот самый случай, когда «фильтровать базар» лучше всего именно рекэкспами. Однако приложение я, как всегда, стал писать на GWT, а в нем нет непосредственной поддержки регулярных выражений (а может и есть, но так глубоко закопана, что я об этом не знаю). Зато, как подсказал всемогущий Google, непосредственная поддержка регэкспов есть в стандартном JavaScript. С некоторых пор там предусмотрен специальный объект — RegExp, которым можно пользоваться примерно так:
var rgxp = new RegExp("^\\d+$");
var num = "12345";
alert(rgxp.test(num));
Но это еще не всё. Как видно из примера, слэши и некоторые другие спецсимволы в строках Java(Script) требуют экранирования. Чтобы сделать этот жуткий лес из палок прозрачнее, в JS придумали более эффективную форму записи регэкспов, заключая их не в кавычки, а в косые черточки. Вот, например, как в этой форме выглядит решение вышесформулированной задачи:
var digits = /^\d{5}$/; // только цифры
var id5ch = /^[\u0400-\u04FF]{3}\d{2}$/; // три кириллических буквы, две цифры
var plain = /^[\u0400-\u04FF]{3,}$/; // только кириллические буквы
return digits.test(s) || id5ch.test(s) || plain.test(s);
Очень удобно, мне понравилось. Поскольку GWT поддерживает native-методы, написанные непосредственно на JS, я легко интегрировал этот код в свое приложение.
Комментарии (0)
RSS свернуть / развернутьТолько зарегистрированные и авторизованные пользователи могут оставлять комментарии.