Проверка формы на стороне клиента и на стороне сервера

1

Проверка для html-формы должна выполняться с обеих сторон, а также с регулярным выражением с обеих сторон.

Клиентская сторона: отображает сообщение пользователю без запроса сервера

Серверная сторона: подтвердите, что все в порядке и проверка безопасности в случае, если js отключен или кто-то пытается взломать форму

Мой вопрос: я обычно вижу некоторые ошибки между регулярным выражением на стороне сервера и регулярным выражением на стороне клиента, которые не совпадают.

Я нахожусь в С#, вы думаете, что Regex должен быть в backend, и сервер должен поместить свое собственное регулярное выражение на стороне клиента (Js)?

Я хочу этого избежать:

C# -> public const string AlphanumericField = @"[^A-Za-z0-9_]";
JS -> var alpahField = "[^A-Za-z_-]";

Я хочу, чтобы обе декларации были для одного и того же.

  • 0
    Вы используете веб-формы или MVC?
Теги:

4 ответа

1

Для выражения regualtare я всегда использую RegularExpressionValidator, доступный в asp.net

Отметьте http://msdn.microsoft.com/en-us/library/eahwtc9e.aspx для более подробной информации о валидаторе регулярных выражений.

  • 0
    Но вы будете иметь обе декларации? один в C # и один в атрибуте ValidationExpression?
0

Вы можете использовать то же самое регулярное выражение (как видно с помощью механизма регулярных выражений), как на стороне клиента, так и на стороне сервера, но вам нужно будет объявить их отдельно, потому что С# и JavaScript используют разные схемы экранирования. Возьмем, например, регулярное выражение, которое проверяет строку с двойными кавычками, которая может содержать любой символ, сбежавший с обратным слэшем. Вот необходимое значение для регулярного выражения:

Внутреннее регулярное выражение:
^"[^"\\]*(\\.[^"\\]*)*"$

Регулярное выражение Javascript в литерале регулярного выражения:
/^"[^"\\]*(\\.[^"\\]*)*"$/

регулярное выражение С# в стенографической строковой литературе
@"^""[^""\\]*(\\.[^""\\]*)*""$"

С использованием синтаксиса Javascript, единственный метасимвол (который должен быть экранирован) - это косая черта. С регулярным выражением, хранящимся в строковой литеральной строке С#, единственным метасимволом является двойная кавычка, которая "экранируется", помещая две двойные кавычки в строку.

Решение RegexBuddy

Одним из хороших способов достижения вашей цели (для поддержки только одного главного регулярного выражения для каждого правила валидации) является создание всех ваших собственных регулярных выражений с помощью: RegexBuddy (RB). Вы можете хранить все полностью проверенные и отлаженные регулярные выражения (вместе с соответствующими тестовыми данными для каждого регулярного выражения) в одном файле библиотеки regexbuddy. Затем просто используйте функцию встроенного экспорта RB, чтобы генерировать (правильно экранированные) фрагменты кода С# и Javascript для кода.

Если вы серьезно относитесь к созданию точных и эффективных регулярных выражений, вы все равно должны использовать этот инструмент - чтобы проверить, что каждое регулярное выражение работает правильно для всех случаев краев (как совпадающих, так и несоответствующих).

0

Вы можете попросить С# объявить эту переменную для javascript, используя регистр клиента script block

Dim cstext2 As New StringBuilder()
            cstext2.Append("<script type=""text/javascript"">")
            cstext2.Append("var alpahField = \"" + AlphanumericField  +"\";")
            cstext2.Append("script>")
            RegisterClientScriptBlock(csname2, cstext2.ToString())
0

Если это возможно в вашем приложении, вы можете сделать вызов AJAX для проверки на стороне клиента, что позволит вам иметь этот RegEx в одном месте и легко проверить. Вы можете получить очень незначительный успех, попав на сервер, каждый раз, когда вам нужно это проверить, но удобство его обслуживания во многих случаях стоит.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню