Далее на странице...
Ранее было рассмотрено достаточно тонкостей и нюансов при составлении регулярных выражений.
Теперь нужно выполнить самостоятельное задание.
Решить это задание легче, чем составить регулярное выражение для поиска сайта в строке.
Нужно написать регулярное выражение для поиска в тексте номера кредитной карты. Текст: "Иван вчера потерял свою кредитку, ее номер 1178-9087-2384-8787. Поэтому он пошел в банк и описал ситуацию. Там пошли ему навстречу и выдали новую кредитку под номером: 1103-8899-0811-1722".
Напомню, что кредитные карты имеют формат: xxxx-xxxx-xxxx-xxxx. Например: 1178-9087-2384-8787
При этом, вам нужно найти только те номера, в которых первые 4 цифры содержат только 0, или 1 или 2, или 3, т.е. вас, например, устроит номер 1103-8899-0811-1722, но не устроит 1490-8877-7345-8111 (т.к. здесь присутствует цифры 4 и 9, не удовлетворяющие нашим условиям).
При этом номер кредитки нужно не просто найти, а вытащить в переменную result и вывести на экран.
Далее будут рассмотрены два решения.
Решение №1
<script type = "text/javascript">
var card = "Иван вчера потерял свою кредитку, ее номер 1178-9087-2384-8787. Поэтому он пошел в банк и описал ситуацию. Там пошли ему навстречу и выдали новую кредитку под номером: 1103-8899-0811-1722";
var regular_all = /[0-9-]{19}/g; /* Регулярное выражение для поиска всех номеров кредитных карт в строке */
var regular_select = /[0-3]{4}[0-9-]{15}/g; /* Регулярное выражение для поиска номера кредитной карты, первые четыре символа, которого состоят из цифр от 0 до 3 */
var result_all = card.match(regular_all);
var result_select = card.match(regular_select);
document.write(result_all + " - Это все номера кредитных карт в строке <p>");
document.write(result_select + " - Номер кредитной карты, где первые четыре цифры находятся в диапазоне от 0 до 3");
</script>
Пояснения к решению №1:
-
Номер кредитной карты состоит из 19-ти символов xxxx-xxxx-xxxx-xxxx.
-
Переменная regular_all содержит регулярное выражение [0-9-]{19} для поиска номера кредитной карты, состоящего из любых цифр от 0 до 9.
Диапазон [0-9-] - цифры от 0 до 9 и дефис в количестве {19} символов.
-
Добавляем к регулярному выражению глобальный поиск g для поиска всех номеров кредитных карт в строке.
-
Переменная regular_select содержит регулярное выражение [0-3]{4}[0-9-]{15} для поиска номера кредитной карты, первые четыре символа, которого состоят из цифр от 0 до 3.
Решение №2
<script type="text/javascript">
var card = "Иван вчера потерял свою кредитку, ее номер 1178-9087-2384-8787. Поэтому он пошел в банк и описал ситуацию. Там пошли ему навстречу и выдали новую кредитку под номером: 1103-8899-0811-1722";
var regular_all = /\d{4}-\d{4}-\d{4}-\d{4}/g; /* Регулярное выражение для поиска всех номеров кредитных карт в строке */
var regular_select = /[0123]{4}-\d{4}-\d{4}-\d{4}/g; /* Регулярное выражение для поиска номера кредитной карты, первые четыре символа, которого состоят из цифр от 0 до 3 */
var result_all = card.match(regular_all);
var result_select = card.match(regular_select);
document.write(result_all + " - Это все номера кредитных карт в строке <p>");
document.write(result_select + " - Номер кредитной карты, где первые четыре цифры находятся в диапазоне от 0 до 3");
</script>
Пояснения к решению №2:
-
Номер кредитной карты имеет формат xxxx-xxxx-xxxx-xxxx. То есть это 4 последовательности из 4-ч цифр, разделенных дефисом
-
Переменная regular_all содержит регулярное выражение:
\d{4}-\d{4}-\d{4}-\d{4} для поиска номера кредитной карты, состоящего из любых цифр от 0 до 9.
Любая цифра от 0 до 9 \d и квантор {4} (что значит ровно 4) образуют шаблон, который обозначает последовательность из любых 4-х цифр от 0 до 9 \d{4}.
Таких шаблонов всего 4, разделенных дефисом.
-
Переменная regular_select содержит регулярное выражение:
[0123]{4}-\d{4}-\d{4}-\d{4} для поиска номера кредитной карты, первые четыре символа, которого состоят из цифр от 0 до 3.
[0123]{4} - Диапазон [0123] из цифр от 0 до 3 в количестве {4} символов.