Валидация данных
От: Аноним  
Дата: 09.05.10 09:50
Оценка:
Например нужно проверить что пароль имеет длину >8 символов, а также в нем нет каких-то специфических символов, а также последовательность символов не совпадает с последовательностью клавиш на клавиатуре, содержит обязательно цифру и символы разного регистра.

В общем случае это должен быть некий метод bool IsValid( string value ) который реализует алгоритм проверки.

Сейчас приходится реализовывать метод IsValid как на клиенте ( javascript ), так и на сервере ( метод веб-сервиса ).
Проблема очевидна — дублирование кода. Если меняется логика проверки, то ее нужно менять в нескольких местах.
Как вариант вижу решение использовать на сервере javascript который реализует IsValid и запускать выполнение этого скрипта также на сервере ( пока точно не знаю как, но технически это по идее возможно ).

Может есть более элегантные и быстродействующие способы ?
Re: Валидация данных
От: vbarhatov Россия  
Дата: 09.05.10 14:03
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Например нужно проверить что пароль имеет длину >8 символов, а также в нем нет каких-то специфических символов, а также последовательность символов не совпадает с последовательностью клавиш на клавиатуре, содержит обязательно цифру и символы разного регистра....


Столкнулся сейчас с точно такой же задачей. Пока реализовано так же, как у Вас.

Сейчас прикинул... А если отделить логику от кода, и скажем, записать все условия отдельно в xml? Можно использовать регулярные выражения.

На крайний случай, если у нас есть несколько регулярных выражений, то скрипт для клиента можно и сгенерировать
Re[2]: Валидация данных
От: Аноним  
Дата: 09.05.10 16:36
Оценка:
Здравствуйте, vbarhatov, Вы писали:

V>Здравствуйте, Аноним, Вы писали:


А>>Например нужно проверить что пароль имеет длину >8 символов, а также в нем нет каких-то специфических символов, а также последовательность символов не совпадает с последовательностью клавиш на клавиатуре, содержит обязательнои цифру и символы разного регистра....


V>Столкнулся сейчас с точно такой же задачей. Пока реализовано так же, как у Вас.


V>Сейчас прикинул... А если отделить логику от кода, и скажем, записать все условия отдельно в xml? Можно использовать регулярные выражения.


V>На крайний случай, если у нас есть несколько регулярных выражений, то скрипт для клиента можно и сгенерировать



По идее так и есть, обобщенный вариант решения — нужно создать некий универсальный язык и 2 транслятора, один в код C# ( код серверного приложения ) другой в JavaScript ( код клиентского приложения ). Код трансляторов будет написан 1 раз и зафиксирован, причем трансляцию можно проводить перед компиляцией веб-приложения, тем самым не будет издержек производительности.

Как вариант можно взять один из уже существующих языков, например клиенский или серверный.

Учитывая что язык JavaScript не типизирован строго, а C# типизирован, то проще переводить из C# в JavaScript;
Например
bool IsValid( string text )
{
   if ( text.Length < 8 )
     return false;
}


в Javascript перевести легко, просто убрав типы
function IsValid( text )
{
   if ( text.Length < 8 )
     return false;
}


обратно же перевести затруднительно, т.к. тип полей можно определить уже только по семантике текста , по производимым операциям.
С другой стороны в C# может использоваться оператор или метод который не преобразуется в JavaScript, например string.Split(','), поэтому тут накладывается ограничение на испольуемые в C# функции.

Отсюда получается следующее решение :
— использовать для создания алгоритма валидации C# или другой язык на стороне сервера, как правило строго типизированный, вынести данную реализацию в отдельные классы и файлы. Например
.\Validators\validatorlogin.cs
.\Validators\validatorpwd.cs

— создать утилиту которая преобразовывает метод IsValid класса из C# в соотвветсвующую функцию JavaScript, например в validatorlogin_IsValid()
— настроить сборку чтобы сначала запускалась утилита и генерила соответстующий js файл validators.js
Re[3]: Валидация данных
От: Sinclair Россия https://github.com/evilguest/
Дата: 13.05.10 14:30
Оценка:
Здравствуйте, Аноним, Вы писали:

А>По идее так и есть, обобщенный вариант решения — нужно создать некий универсальный язык и 2 транслятора, один в код C# ( код серверного приложения ) другой в JavaScript ( код клиентского приложения ). Код трансляторов будет написан 1 раз и зафиксирован, причем трансляцию можно проводить перед компиляцией веб-приложения, тем самым не будет издержек производительности.


А>Как вариант можно взять один из уже существующих языков, например клиенский или серверный.


А> — создать утилиту которая преобразовывает метод IsValid класса из C# в соотвветсвующую функцию JavaScript, например в validatorlogin_IsValid()

А> — настроить сборку чтобы сначала запускалась утилита и генерила соответстующий js файл validators.js

А ещё лучше ознакомиться с тем, что уже достигнуто в данной области. Напрмер, здесь.
Всё уже давным-давно украдено. Как минимум длины, ограничения на инты, и регулярные выражения присутствуют как данность.
Для более экзотических сценариев совершенно необязательно писать утилиту, которая будет уметь парсить не самый простой язык С# и придумывать для него JavaScript — аналог.
Можно взять готовое дерево выражений, и работать сразу с ним, заморачивась исключительно back-end-ом.
Тогда в коде можно будет написать что-то вроде
AddValidator((string name)=>name.ToUpper()==name, "Uppercase string required");

А относительно рутинный код будет обходить дерево и превращать его в JavaScript-аналог.
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.