< > ↑ Вгору

Регулярні вирази javaScript

Призначення регулярних виразів: опис вмісту текстового рядка за допомогою спеціальних правил з метою перевірки правильності заповнення форми, що відправляє дані на сервер

Створення регулярних виразів (2 способи)

1. Конструктор RegExp()

var firstName = new RegExp("John");

У представленому прикладі створюється об'єкт RegExp з ім'ям firstName, що містить шаблон John

2. Присвоєння шаблону змінній

var firstName= /John/;

В даному прикладі /John/ є шаблоном

Розглянемо приклади з регулярними виразами javascript:

Потрібно знайти

Регулярний вираз

asdasdasdprivetasdasdasd

/privet/

privet

/^privet1/

asdasdeprtviasdasdasd

asdasdeeeeeedfgdgdg

/[privet]/ или /[privet]{6}/

SdfuiyuiewrR345

/[a-zA-Z0-9]/ или /w/

452341

/[0-9]/ или /d/

jsdf8H?&

/./

Синтаксис регулярних виразів і метод пошуку

Розглянемо класи пошуку за шаблоном в javaScript:

\w Будь-який символ в слові (алфавітно-цифровий)

\W не алфавітнo-цифровий символ (?, *, & ...)

Як шукати за шаблоном

Метод search (regExp) - повертає позицію символу з якого починається відповідність. Повертає -1 якщо рядок не відповідає регулярному виразу

Приклад: знаходить літера& в рядку пошуку, але &літера не буде знайдений:

Рішення:

var a = /\w\W/; // шаблон регулярного виразу
var str1 = "rock&"; // рядок, в якому здійснюється пошук
var str2= "&roll"; // рядок, в якому здійснюється пошук

if ( str1.search(a) == -1)
        alert("не найдено")
else
        alert("найдено"); // буде знайдено

if ( str2.search(a) == -1)
        alert("не найдено"); // буде не знайдено
else
        alert("найдено");

Наступний клас:

\s Будь-який символ пробілу (символи табуляції, нового рядка, повернення каретки)

\S Безпробільний символ

Приклад: Відповісти на питання, чи складається рядок тільки з одного слова або з кількох слів. Тобто чи знайдеться непробільний символ, за яким слідує символ пробілу:

Рішення:

var a = /\s\S/; // шаблон регулярного виразу
var str = "слово1 слово2"; // рядок, в якій здійснюється пошук

if ( str.search(a) == -1)
        alert( "одне слово");
else
        alert( "несколько слов"); // буде знайдено

\d цифровий символ

\D нецифровий символ

Приклад: знайде в рядку пошуку, але не зможе знайти р4:

var pattern = /\d\D/;

[\b] Використовується для пошуку символу забою (backspace)

[...] Будь-який символ, зазначений в дужках

[^...] Будь-який символ, за винятком перерахованого в дужках

Приклад: знайде ag в рядку пошуку, але не зможе знайти ga, оскільки на першому місці повинні стояти або а, або b, або c:

var pattern = /[abc] [^def]/;

[x-у] Символи в проміжку від х до у

[^x-у] Символи, що не входять в проміжок від х до у

Приклад: знайде ac, але не знайде ad:

var a = /[a-d][^d-f]/;
var str = "ad";
if( str.search(a) == -1) alert("неверно")
else
alert("верно");

{x, у} Попередній елемент повинен бути знайдений не менше x разів, але не більше у разів

{x,} Попередній елемент повинен бути знайдений не менше х разів

Приклад: знайде chose і choose в рядку пошуку, але не зможе знайти chooose:

var pattern = /{1,2}se/;

? Попередній елемент повинен бути знайдений один раз або взагалі не знайдений

+ Попередній елемент повинен бути знайдений хоча б один раз

* Попередній елемент повинен бути знайдений необмежену кількість разів або взагалі не знайдений

Приклад: знайде abc або ас в рядку, але не зможе знайти abbe, оскільки символ «b» повинен бути знайдений один раз або взагалі не знайдений:

var pattern = /ab?c/;

| Повиннен бути збіг або в виразі справа, або зліва від символу |

Приклад: видасть «вірно»:

var a = /cat|dog/;
var str = "sdfcatsdf";
if ( str.search(a) == -1) alert("неверно")
else
alert("верно");

(...) Угруповання всіх елементів в круглих дужках в підшаблон

Приклад: здійснить пошук в рядку far і for, але не fer. Приклад видасть «вірно»:

var a = /f(a | o)r/;
var str = "sdffarsdf";
if (str.search(a) == -1) alert("неверно")
else
alert("верно");

^ Пошук з початку рядка або ж з початку першого рядка в багаторядкових даних

$ Пошук з кінця рядка або з кінця останнього рядка в багаторядкових даних

Приклад: виконає пошук слова The, якщо воно присутнє на початку послідовності або на початку одиночного рядка:

var pattern = /^The/;

\b Позиція між знаком, що входить в слова, і що не входить в слова

\B Позиція, яка не перебуває між знаком, що входить в слова, і що не входить в слова

Приклад: знайде слово cat, за яким слідує пробіл. Пробіл є несловниковим символом:

var pattern = /cat\b/;

Всі основні класи в регулярних виразах

Назва класу

Дія

\w

Будь-який символ в слові (алфавітно-цифровий)

\W

Неалфавітно-цифровий символ (?, *, & ...)

\s

Будь-який символ пробілу (символи табуляції, нового рядка, повернення каретки)

\S

Hепробільний символ

\d

Цифровий символ

\D

Hецифровий символ

[\b]

Використовується для пошуку символу забою (backspace)

[...]

Будь-який з символів, зазначених в дужках

[^...]

Будь-який символ, за винятком перерахованих у дужках

[х—у]

Символи в проміжку від х до у

[^х—у]

Символи, що не входять в проміжок від х до у

{х,у}

Попередній елемент повинен бути знайдений не менше х разів, але не більше у разів

{х,}

Попередній елемент повинен бути знайдений не менше х разів

?

Попередній елемент повинен бути знайдений один раз або взагалі не знайдений

+

Попередній елемент повинен бути знайдений хоча б один раз

*

Попередній елемент повинен бути знайдений необмежену кількість разів або взагалі не знайдений

|

Повиннен бути збіг або в виразі справа, або зліва від символу |

(...)

Угруповання всіх елементів в круглих дужках в підшаблон

^

Пошук з початку рядка або ж з початку першого рядка в багаторядкових даних

$

Пошук з кінця рядка або з кінця останнього рядка в багаторядкових даних

\b

Позиція між знаком, що входить в слова, і що не входить в слова

\B

Позиція, яка не перебуває між знаком, що входить в слова, і що не входить в слова

Тепер розглянемо дійсно серйозний і часто використовуваний приклад використання регулярних виразів javascript:

Приклад: Здійснити перевірку правильності введення в текстове поле електронної адреси:

Sername-name.mymail@aaa-net.tri.com

1.

var a = /^[a-zA-Z0-9_]{1,}({0,1}[a-zA-Z0-9_]{1,}){0,}@[a-zA-Z0-9_]{1,}({0,1}[a-zA-Z0-9_] {1,}){0,}(.[a-zA-Z0-9_]{2,4}) {1,}1/;

2.

var a = /^\w+([\.-]?\w+)*@\w+([\.-]?\w+)*(\.\w{2,4})+$/;

Ці два приклади еквівалентні. Фрагменти коду одного кольору виконують одне і те ж дію.

function checkMail(){
var a = /^\w+([\.-]?\w+)*@\w+([\.-]?\w+)*(\.\w{2,4})+$/;
var textMail = document.getElementById('textMail');
var f=document.getElementById('f');
if (textMail.value.search(a) !== -1)
f.submit()
else
alert("невірний мейл");
}

Завдання js 7_1. Запросити у користувача ввести спочатку ім'я, потім вік і потім пароль. Відомо, що пароль повинен включати хоча б одну велику літеру і цифру, починатися він повинен тільки з букви. За допомогою регулярних виразів перевірити: чи введені в перше вікно тільки букви, чи введені в друге вікно тільки цифри, чи введені в третє вікно символи, які повинні знаходитися в паролі.

Завдання js 7_2. Запросити у користувача (метод prompt ()) ввести телефонний номер. Запитувати тричі: спочатку код оператора, потім три наступні цифри номера, далі - 4 останні цифри.

  • За допомогою регулярних виразів перевірити правильність введення (вікно1 = 050 або 067, вікно2 = 3 цифри, вікно3 = 4 цифри).

  • Вивести результат у вигляді (цифри, введені користувачем):

  • 050 - 123 - 4567

Доповніть код:

var nomer1 = prompt("Введіть код оператора: 050 або 067");
var myExp1 = /.../;
if ( nomer1.search(myExp1) == -1) {
          alert("введено неправильно код");
          exit;
     }
...

Об'єкт Date для роботи з датою і часом в javaScript

Вбудовані об'єкти javaScript:

var myDate = new Date();

Створення об'єкта Date

1. Створення об'єкта з поточною датою і часом

var имя_переменной = new Date();

2. Створення об'єкта зі значенням (датою), заданих у вигляді рядка певного формату

var ім'я_змінної = new Date("month, day, year [hours:minutes:seconds])

var d1 = new Date("December 15, 1997 16:57:00");
var d2 = new Date("2000 jan 23 10:20"); /* Скорочений варіант */

3. Створення об'єкта зі значенням, заданим за допомогою числових параметрів:

var ім'я_змінної = new Date(year, month, day [,hours,minutes,seconds])

var d2 = new Date(1995,4,9,13,30,00);
document.writeln(d2); // Tue May 09 1995 13:30:00 GMT+0200 (Київ, літній час)

Приклади використання об'єкта Date в javaScript:

var today = new Date(); / * Об'єкт дати today містить інформацію про поточну дату * /
var date = today. getDate();
alert(date); // поточне число
var day = today. getDay();
alert(day); // значення дня тижня (0..6)
var year = today. getFullYear();
alert(year); //2010
var month = today. getMonth();
alert(month); // поточний місяць
var hours = today. getHours();
alert(hours); // поточну годину, наприклад 19
var minutes = today. getMinutes();
alert(minutes); // поточні хвилини

Завдання js 7_3. Використовуючи методи об'єкта date, вивести на екран час в форматі: година: хвилина: секунда (приклад: 14:23:11)

При цьому, якщо секунди і хвилини потрапляють в інтервал від 0 до 10, вони повинні виводитися з нулем попереду. Tобто замість 18:7:3 у Вас повинно виводитися 18:07:03

Доповніть пропуски в коді:

var now = new Date();
var hours = now.getHours();
...
var second s = ...;

if(minutes < 10){
      ...;
}
if(...){
      ...;
}

document.write("Текущее время: " + hours + ":" + minutes + ":" + seconds);

Завдання js 7_4. За поточною датою визначити день тижня (використовуючи порядковий номер). Вивести результат у вигляді дня тижня (наприклад, «неділя») на екран.

Використовувати оператор перемикання (switch).

var d = new Date();
...

Методи об'єкта Date

Метод getTime() об'єкта Date в javascript

Метод getTime() повертає час в мілісекундах, що минув з 1 січня 1970 р

Розглянемо конкретний приклад з використанням методу getTime().

Приклад: Потрібно дізнатися кількість хвилин і годин, які пройшли з 1970 р

Рішення:

var now = new Date();
var from1970 = (now.getTime() / (1000 * 60)); // хвилин
document.write(from1970);

var from1970 = (now.getTime() / (1000 * 60 * 60)); // годин
document.write("<br>" + from1970);

Пояснення: Ділимо на 1000 щоб отримати з мілісекунд секунди

Ще один приклад:

Приклад: Визначити кількість днів до Нового року

Рішення:

// рік, місяць, день, годину, хв, сек:
var ny = new Date(2017,0,1,0,0,0); // 0-й місяць наступного року
var now = new Date();
// Кількість днів з 1970
var from1970 = (now.getTime() / (1000 * 60 * 60 * 24));
document.write (from1970 + "<br>");
// Кількість днів з 1970 до Нового року
var from1970ToNy = (ny.getTime() / (1000 * 60 * 60 * 24));
document.write (from1970ToNy + "<br>");
document.write(Math.round(from1970ToNy) - Math.round(from1970));

Завдання js 7_5. Написати функцію, яка виводить на екран дату, яка настане через n днів від сьогоднішньої.

Рекомендації до виконання:

  • n - кількість днів, яке потрібно запросити у користувача при завантаженні сторінки.

  • Це значення передається в функцію як параметр.

  • При цьому підсумкову дату треба вивести в нормальному форматі українською мовою.

  • Наприклад так (приклад для введення числа 10):

    Через 10 днів буде ось така дата:
    День тижня: П'ятниця
    Число: 28
    Місяць: Червень
    Рік: 2019

  • При цьому користувач повинен ввести число від 1 до 1000.

  • Якщо він не потрапив в інтервал або ввів не числo, то треба вивести помилку.

  • Перевірку можна здійснювати за межами функції.

Підказка. Якщо завдання здається складним, не поспішайте дивитися відповідь. Намагайтеся розбити задачу на якомога більш дрібні кроки і для початку спробуйте написати код просто для конкретного числа днів, взагалі не використовуючи функцію.

Заповніть пропуски в коді:

function viewDate(n){
       var now = ...;
       var nowMilli = now. ...;

       var nowPlus79 = new Date(...);
       var milli79 = ...;

       var summaMilli = ...;
       var itogMoment = new ... (...);

       var myDays = ["Неділя","Понеділок","Вівторок","Середа","Четвер","П'ятниця","Субота"];
       var myMonths = ...;
       document.write("День тижня: " + ...);
       document.write("Число: " + ...);
       ...
       ...
}
var userDays = prompt(...);
...
...
...
...
viewDate(...);

Метод parse() об`єкта Date()

Метод parse() в javascript - перетворює рядок дати типу «Jan 11,1996» в кількість мілісекунд, що пройшли з півночі 1 січня 1970:

Приклад: Чи виведе на екран оглядача приблизно такий рядок: Wednesday, May 21, 1958 10:12:00

var d = new Date();
d.setTime(Date.parse("21 May 1958 10:12"));
document.write(d.toLocaleString());

Метод UTC (рік, місяць, день, година, хвилина, секунда) об'єкта Date ()

UTC (рік, місяць, день, година, хвилина, секунда) - повертає кількість мілісекунд для дати на базі універсального координованого часу (UTC), які пройшли з півночі 1 січня 1970 року.

Приклад: Визначити кількість днів між двома датами, наприклад 10 лютого 2003 і 5 березня 2003

var date1 = new Date(2003,01,10);
document.write(Date.parse(date1) + " "); //1044824400000
var date2 = new Date(2003,02,5);
document.write(Date.parse(date2) + " "); //1046811600000
document.write(Date.parse(date2) - Date.parse(date1) + " "); //1987200000
var days = (Date.parse(date2) - Date.parse(date1))/1000/60/60/24;
document.write(days); // результат: 23

Питання для самоконтролю:

  • Для чого призначений вбудований об'єкт Date ()?

  • Які способи завдання значень для цього об'єкту Ви знаєте?

  • Яке призначення методів GetMonth () і SetMonth ()?

  • Як ви думаєте, де необхідно застосовувати методи parse () і UTC ()?