Upload
-
View
58
Download
0
Embed Size (px)
Citation preview
Валидация на основе метаописания
8
... validators: [{ method: 'lte', message: 'Field foo should be less than 10', value: 10 }] ...
Готовые решения?❏ math-expression-evaluator
❏ mathjs
❏ angular-expressions
❏ expressions-js
❏ expression-paser
10
math-expression-evaluator
Чрезвычайно эффективный, гибкий и потрясающий парсер для математических выражений в Javascript
http://redhivesoftware.github.io/math-expression-evaluator
120,205 downloads in the last day
640,123 downloads in the last week
2,390,992 downloads in the last month
One open issues on GitHub
No open pull requests on GitHub
11
Достоинства❏ Популярность (2,390,992 скачиваний в месяц)
❏ Работа с математическими выражениями
❏ Расширяемость
❏ Размер библиотеки ~13Kb
❏ Документация
12
mathjs
Math.js - библиотека для JavaScript и Node.js. Включает в себя гибкий анализатор выражений с поддержкой символьных вычислений, поставляется с большим набором встроенных функций и констант
http://mathjs.org
3,432 downloads in the last day
16,779 downloads in the last week
68,277 downloads in the last month
87 open issues on GitHub
10 open pull requests on GitHub
14
Достоинства❏ Популярность (68,277 скачиваний в месяц)
❏ Работа с математическими и логическими выражениями
❏ Расширяемость
❏ Документация
15
angular-expressions
Лучшая часть Angular, вынесенная в отдельный модуль
www.npmjs.com/package/angular-expressions
66 downloads in the last day
478 downloads in the last week
1,606 downloads in the last month
3 open issues on GitHub
No open pull requests on GitHub
17
Достоинства❏ Популярность (1,606 скачиваний в месяц)
❏ Работа с математическими выражениями и фильтрами
❏ Размер библиотеки ~13.5Kb
18
expressions-js
Преобразует строковые выражения в исполняемые функции JavaScript
www.npmjs.com/package/expressions-js
3 downloads in the last day
66 downloads in the last week
325 downloads in the last month
2 open issues on GitHub
No open pull requests on GitHub
20
Достоинства❏ Работа с математическими и логическими выражениями
❏ Расширяемость
❏ Размер библиотеки ~8.5Kb
21
expression-parser
Парсер математических выражений, со встроенным компилятором для создания исполняемых функций в JavaScript
www.npmjs.com/package/expression-parser
1 downloads in the last day
7 downloads in the last week
70 downloads in the last month
2 open issues on GitHub
No open pull requests on GitHub
23
morph-expressions Чрезвычайно эффективный и гибкий парсер математических и/или логических выражение для JavaScript.
www.npmjs.com/package/morph-expressions
26
Использование
import Parser from 'morph-expressions';
const parser = new Parser(); const compiled = parser.parse('1 + 1'); compiled.eval(); // returns 2
27
Переменные
const compiled = parser.parse('x + 1 - y == 0');
compiled.identifiers; // ['x', 'y'] compiled.eval({ x: 2, y: 3 }); // true
parser.parseAndEval('x + 1 - y == 0', { x: 2, y: 3 });
28
Функции и вычислимые поля
parser.registerFunction('sqr', val => val * val); parser.registerProperty('foo', () => 'bar'); parser.registerProperty('now', () => new Date()); parser.parseAndEval('sqr(sqr(x))', { x: 2 }); // 16 parser.parseAndEval('foo'); // ‘bar’ parser.parseAndEval('now'); // Wed Feb 04 2015 12:00:00
29
Валидация площади квартиры
parser.registerFunction('SUM', (l, r) => l + r);
parser.parseAndEval('SUM(kitchen, living) <= total', { total: 40, kitchen: 10, living: 30 });
30
Валидация почтового кода
parser.registerFunction('ZIP_CODE', c => /\d{6}/.test(c));
parser.parseAndEval('ZIP_CODE(code)', { code: 644106 });
31
JSON Form
❏ Валидация только по значению текущего поля
❏ Нет сложноподчиненных полей
43
Репозиторий: git.io/vDO2D
JSON Form
❏ Валидация только по значению текущего поля
❏ Нет сложноподчиненных полей
❏ Нет вычислимых полей
44
Репозиторий: git.io/vDO2D
JSON Form
❏ Валидация только по значению текущего поля
❏ Нет сложноподчиненных полей
❏ Нет вычислимых полей
❏ Не поддерживается с 2014 года
45
Репозиторий: git.io/vDO2D
JSON Form
❏ Валидация только по значению текущего поля
❏ Нет сложноподчиненных полей
❏ Нет вычислимых полей
❏ Не поддерживается с 2014 года
❏ Устаревшие зависимости
46
Репозиторий: git.io/vDO2D
Smartforms
"form": { "email": { "block": "input" }, "пароль": { "block": "input", "type": "password" }},"schema": ["email", "пароль"]
51
Таблицы
53
"schema": [{ "block": "fieldset", "items": [ "Адрес", "Дом", "Корпус", "Квартира" ], "layout": [ 1, 3 ]}]
Таблицы
54
"schema": [{ "block": "fieldset", "items": [ "Адрес", "Дом", "Корпус", "Квартира" ], "layout": [ 1, [6, 3, 3] ]}]
Апробация morph-expressions на smartforms
Библиотека для создания форм и модальных окон с формами по метаописанию
58
Валидация данных"validationRules": [
{
"rule": "1 <= длина и длина <= 4 и число",
"errorMessage": "...",
"isGlobalError": false
}
]
60
Пример регистрации свойств
parser.registerProperty('длина', scope => { const value = scope[scope.fieldName] || '';
return value.length;});
61
Сложноподчиненные поля"Номер телефона": {
"dependencies": "Тип == ’По номеру телефона’",
"placeholder": "+7 (3822) ______"
"block": "text"
}
62
Вычислимые поля
63
"Сумма": {
"block": "text",
"label": "Сумма"
},
"Комиссия": {
"block": "static",
"calculationRule": "Сумма * 0.05"
}