Регулярні вирази javaScript
Призначення регулярних виразів: опис вмісту текстового рядка за допомогою спеціальних правил з метою перевірки правильності заповнення форми, що відправляє дані на сервер
Створення регулярних виразів (2 способи)
1. Конструктор RegExp()
var firstName = new RegExp("John");
У представленому прикладі створюється об'єкт з ім'ям , що містить шаблон
2. Присвоєння шаблону змінній
var firstName= /John/;
В даному прикладі є шаблоном
Розглянемо приклади з регулярними виразами javascript:
|
Потрібно знайти |
Регулярний вираз |
|
asdasdasdprivetasdasdasd |
/privet/ |
|
privet |
/^privet1/ |
|
asdasdeprtviasdasdasd asdasdeeeeeedfgdgdg |
/[privet]/ или /[privet]{6}/ |
|
SdfuiyuiewrR345 |
/[a-zA-Z0-9]/ или /w/ |
|
452341 |
/[0-9]/ или /d/ |
|
jsdf8H?& |
/./ |
Синтаксис регулярних виразів і метод пошуку
Розглянемо класи пошуку за шаблоном в javaScript:
Будь-який символ в слові (алфавітно-цифровий)
не алфавітнo-цифровий символ (?, *, & ...)
Як шукати за шаблоном
Метод - повертає позицію символу з якого починається відповідність. Повертає якщо рядок не відповідає регулярному виразу
Приклад: знаходить в рядку пошуку, але не буде знайдений:
Рішення:
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("найдено");
Наступний клас:
Будь-який символ пробілу (символи табуляції, нового рядка, повернення каретки)
Безпробільний символ
Приклад: Відповісти на питання, чи складається рядок тільки з одного слова або з кількох слів. Тобто чи знайдеться непробільний символ, за яким слідує символ пробілу:
Рішення:
var a = /\s\S/; // шаблон регулярного виразу
var str = "слово1 слово2"; // рядок, в якій здійснюється пошук
if ( str.search(a) == -1)
alert( "одне слово");
else
alert( "несколько слов"); // буде знайдено
цифровий символ
нецифровий символ
Приклад: знайде в рядку пошуку, але не зможе знайти :
var pattern = /\d\D/;
Використовується для пошуку символу забою (backspace)
Будь-який символ, зазначений в дужках
Будь-який символ, за винятком перерахованого в дужках
Приклад: знайде в рядку пошуку, але не зможе знайти , оскільки на першому місці повинні стояти або , або , або :
var pattern = /[abc] [^def]/;
Символи в проміжку від х до у
Символи, що не входять в проміжок від х до у
Приклад: знайде , але не знайде :
var a = /[a-d][^d-f]/;
var str = "ad";
if( str.search(a) == -1) alert("неверно")
else
alert("верно");
Попередній елемент повинен бути знайдений не менше x разів, але не більше у разів
Попередній елемент повинен бути знайдений не менше х разів
Приклад: знайде і в рядку пошуку, але не зможе знайти :
var pattern = /
Попередній елемент повинен бути знайдений один раз або взагалі не знайдений
Попередній елемент повинен бути знайдений хоча б один раз
Попередній елемент повинен бути знайдений необмежену кількість разів або взагалі не знайдений
Приклад: знайде або ас в рядку, але не зможе знайти , оскільки символ повинен бути знайдений один раз або взагалі не знайдений:
var pattern = /ab?c/;
Повиннен бути збіг або в виразі справа, або зліва від символу
Приклад: видасть «вірно»:
var a = /cat|dog/;
var str = "sdfcatsdf";
if ( str.search(a) == -1) alert("неверно")
else
alert("верно");
Угруповання всіх елементів в круглих дужках в підшаблон
Приклад: здійснить пошук в рядку і , але не . Приклад видасть «вірно»:
var a = /f(a | o)r/;
var str = "sdffarsdf";
if (str.search(a) == -1) alert("неверно")
else
alert("верно");
Пошук з початку рядка або ж з початку першого рядка в багаторядкових даних
Пошук з кінця рядка або з кінця останнього рядка в багаторядкових даних
Приклад: виконає пошук слова , якщо воно присутнє на початку послідовності або на початку одиночного рядка:
var pattern = /^The/;
Позиція між знаком, що входить в слова, і що не входить в слова
Позиція, яка не перебуває між знаком, що входить в слова, і що не входить в слова
Приклад: знайде слово , за яким слідує пробіл. Пробіл є несловниковим символом:
var pattern = /cat\b/;
Всі основні класи в регулярних виразах
|
Назва класу |
Дія |
|
\w |
Будь-який символ в слові (алфавітно-цифровий) |
|
\W |
Неалфавітно-цифровий символ (?, *, & ...) |
|
\s |
Будь-який символ пробілу (символи табуляції, нового рядка, повернення каретки) |
|
\S |
Hепробільний символ |
|
\d |
Цифровий символ |
|
\D |
Hецифровий символ |
|
[\b] |
Використовується для пошуку символу забою (backspace) |
|
[...] |
Будь-який з символів, зазначених в дужках |
|
[^...] |
Будь-який символ, за винятком перерахованих у дужках |
|
[х—у] |
Символи в проміжку від х до у |
|
[^х—у] |
Символи, що не входять в проміжок від х до у |
|
{х,у} |
Попередній елемент повинен бути знайдений не менше х разів, але не більше у разів |
|
{х,} |
Попередній елемент повинен бути знайдений не менше х разів |
|
? |
Попередній елемент повинен бути знайдений один раз або взагалі не знайдений |
|
+ |
Попередній елемент повинен бути знайдений хоча б один раз |
|
* |
Попередній елемент повинен бути знайдений необмежену кількість разів або взагалі не знайдений |
|
| |
Повиннен бути збіг або в виразі справа, або зліва від символу | |
|
(...) |
Угруповання всіх елементів в круглих дужках в підшаблон |
|
^ |
Пошук з початку рядка або ж з початку першого рядка в багаторядкових даних |
|
$ |
Пошук з кінця рядка або з кінця останнього рядка в багаторядкових даних |
|
\b |
Позиція між знаком, що входить в слова, і що не входить в слова |
|
\B |
Позиція, яка не перебуває між знаком, що входить в слова, і що не входить в слова |
Тепер розглянемо дійсно серйозний і часто використовуваний приклад використання регулярних виразів javascript:
Приклад: Здійснити перевірку правильності введення в текстове поле електронної адреси:
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:
-
Object (об'єкти)
-
Number (обробка чисел)
-
String (обробка рядків)
-
Array (масиви)
-
Math (математичні формули, функції і константи)
-
Date (робота з датами і часом)
-
RegExp
-
Global (його властивості Infinity, NaN, undefined)
-
Function
var myDate = new Date();
Створення об'єкта Date
1. Створення об'єкта з поточною датою і часом
2. Створення об'єкта зі значенням (датою), заданих у вигляді рядка певного формату
var d1 = new Date("December 15, 1997 16:57:00");
var d2 = new Date("2000 jan 23 10:20"); /* Скорочений варіант */
3. Створення об'єкта зі значенням, заданим за допомогою числових параметрів:
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. Використовуючи методи об'єкта , вивести на екран час в форматі: година: хвилина: секунда (приклад: )
При цьому, якщо секунди і хвилини потрапляють в інтервал від 0 до 10, вони повинні виводитися з нулем попереду. Tобто замість у Вас повинно виводитися
Доповніть пропуски в коді:
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
Метод об'єкта в javascript
Метод повертає час в мілісекундах, що минув з 1 січня 1970 р
Розглянемо конкретний приклад з використанням методу .
Приклад: Потрібно дізнатися кількість хвилин і годин, які пройшли з 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. Написати функцію, яка виводить на екран дату, яка настане через днів від сьогоднішньої.
Рекомендації до виконання:
-
- кількість днів, яке потрібно запросити у користувача при завантаженні сторінки.
-
Це значення передається в функцію як параметр.
-
При цьому підсумкову дату треба вивести в нормальному форматі українською мовою.
-
При цьому користувач повинен ввести число від 1 до 1000.
-
Якщо він не потрапив в інтервал або ввів не числo, то треба вивести помилку.
-
Перевірку можна здійснювати за межами функції.
Наприклад так (приклад для введення числа 10):
Через 10 днів буде ось така дата:
День тижня: П'ятниця
Число: 28
Місяць: Червень
Рік: 2019
Підказка. Якщо завдання здається складним, не поспішайте дивитися відповідь. Намагайтеся розбити задачу на якомога більш дрібні кроки і для початку спробуйте написати код просто для конкретного числа днів, взагалі не використовуючи функцію.
Заповніть пропуски в коді:
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(...);
Метод об`єкта Date()
Метод в 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());
Метод об'єкта Date ()
- повертає кількість мілісекунд для дати на базі універсального координованого часу (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 ()?