Добавляем...


Регулярные выражения
Обработка текстовых данных является одной из типичных задач в JavaScript. Проверка вводимых в формы данных, построение и анализ файлов cookie, создание и модификация адресов URL и изменение содержимого Web-страниц — все эти задачи подразумевают выполнение множества операций со строками. Возможность сравнения и изменения текстовых данных в JavaScript обеспечивается объектом String, а также регулярными выражениями, которые позволяют использовать шаблоны символов и строк вместо явного указания последних.
   Регулярные выражения имеют давнюю историю во многих операционных системах. Читателям, которые не знакомы с такими средствами UNIX, как grep, sed, awk и Perl, регулярные выражения могут поначалу казаться весьма странными и неудобными, но и такие читатели вскоре убедятся в их пользе. Если вы когда-нибудь использо-зали команды dir в DOS или Is в UNIX, то вы, вероятно, использовали и "групповые символы" типа * или ?. Эти символы являются примитивными регулярными выражениями! Читателям, которые уже работали с регулярными выражениями, особенно в Perl, регулярные выражения JavaScript покажутся достаточно знакомыми.
   Эта глава представляет собой обзор возможностей объекта RegExp JavaScript. Она включает описание базового синтаксиса, типичных сфер использования и более сложных возможностей применения регулярных выражений в сценариях.

Необходимость регулярных выражений

Рассмотрим задачу проверки правильности ввода телефонного номера в форму на Web-странице. Перед тем как направить данные серверу для обработки, следует убедиться, что введенные данные имеют нужный формат. Например, если требуется обеспечить ввод телефонных номеров в формате NNN-NNN-NNNN, где N обозначает любую цифру, можно использовать следующий программный код:

// Возвращается true, если символ является цифрой
function isDigit(character)
{
return (character >= "О" && character <= "9");
}
// Возвращается true, если phone имеет формат NNN-NNN-NNNN
function isPhoneNumber(phone)
{
if (phone.length != 12)
return false;

// Для каждого символа в строке...
for (var i=0; i<12; i++)
{
// Если здесь должен стоять дефис...
if (i == 3 || i == 7)
{
// Возвращается false, если дефиса нет
if (phone.charAt(i) != "-")
return false;
}
// Иначе здесь должна стоять цифра...
else
{
// Возвращается false, если это не цифра
if (!isDigit(phone.charAt(i)))
return false; }
}
return true;
}
}

   He слишком ли много программного кода для такой простой задачи? И этот программный код далек от совершенства, поэтому только представьте, насколько он усложнится, если придется проверять и другие форматы, например телефонные номера с добавочными кодами, международные номера или номера с пропущенными дефисами-разделителями.
   Регулярные выражения значительно упрощают решение подобных задач, позволяя программисту указать шаблон, на "соответствие" которому будет проверяться строка. Это освобождает разработчика от необходимости писать сложный и потенциально подверженный ошибкам программный код, подобный тому, который вы видели в примере выше. С помощью регулярных выражений можно не только проверить соответствие строки конкретному шаблону (наподобие NNN-NNN-NNNN в предыдущем примере), но и в случае несоответствия можно найти, выделить и даже заменить фрагменты строки, частично соответствующие шаблону. Это значительно упрощает распознавание и извлечение структурированных данных типа адресов URL и электронной почты, телефонных номеров и файлов cookie. С помощью регулярных выражений можно оперировать практически любыми типами строковых данных, имеющими прогнозируемый формат.


добавить комментарий
(без перезагрузки и регистрации)


10 случайных разделов

Что ищем на сайте ?


Примеры кода на сайте







@ 2008-2011 Amber
При использовании материалов ссылка на сайт обязательна
Яндекс.Метрика