Проверка для html-формы должна выполняться с обеих сторон, а также с регулярным выражением с обеих сторон.
Клиентская сторона: отображает сообщение пользователю без запроса сервера
Серверная сторона: подтвердите, что все в порядке и проверка безопасности в случае, если js отключен или кто-то пытается взломать форму
Мой вопрос: я обычно вижу некоторые ошибки между регулярным выражением на стороне сервера и регулярным выражением на стороне клиента, которые не совпадают.
Я нахожусь в С#, вы думаете, что Regex должен быть в backend, и сервер должен поместить свое собственное регулярное выражение на стороне клиента (Js)?
Я хочу этого избежать:
C# -> public const string AlphanumericField = @"[^A-Za-z0-9_]";
JS -> var alpahField = "[^A-Za-z_-]";
Я хочу, чтобы обе декларации были для одного и того же.
Для выражения regualtare я всегда использую RegularExpressionValidator
, доступный в asp.net
Отметьте http://msdn.microsoft.com/en-us/library/eahwtc9e.aspx для более подробной информации о валидаторе регулярных выражений.
Вы можете использовать то же самое регулярное выражение (как видно с помощью механизма регулярных выражений), как на стороне клиента, так и на стороне сервера, но вам нужно будет объявить их отдельно, потому что С# и JavaScript используют разные схемы экранирования. Возьмем, например, регулярное выражение, которое проверяет строку с двойными кавычками, которая может содержать любой символ, сбежавший с обратным слэшем. Вот необходимое значение для регулярного выражения:
Внутреннее регулярное выражение: ^"[^"\\]*(\\.[^"\\]*)*"$
Регулярное выражение Javascript в литерале регулярного выражения: /^"[^"\\]*(\\.[^"\\]*)*"$/
регулярное выражение С# в стенографической строковой литературе @"^""[^""\\]*(\\.[^""\\]*)*""$"
С использованием синтаксиса Javascript, единственный метасимвол (который должен быть экранирован) - это косая черта. С регулярным выражением, хранящимся в строковой литеральной строке С#, единственным метасимволом является двойная кавычка, которая "экранируется", помещая две двойные кавычки в строку.
Одним из хороших способов достижения вашей цели (для поддержки только одного главного регулярного выражения для каждого правила валидации) является создание всех ваших собственных регулярных выражений с помощью: RegexBuddy (RB). Вы можете хранить все полностью проверенные и отлаженные регулярные выражения (вместе с соответствующими тестовыми данными для каждого регулярного выражения) в одном файле библиотеки regexbuddy. Затем просто используйте функцию встроенного экспорта RB, чтобы генерировать (правильно экранированные) фрагменты кода С# и Javascript для кода.
Если вы серьезно относитесь к созданию точных и эффективных регулярных выражений, вы все равно должны использовать этот инструмент - чтобы проверить, что каждое регулярное выражение работает правильно для всех случаев краев (как совпадающих, так и несоответствующих).
Вы можете попросить С# объявить эту переменную для 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())
Если это возможно в вашем приложении, вы можете сделать вызов AJAX для проверки на стороне клиента, что позволит вам иметь этот RegEx в одном месте и легко проверить. Вы можете получить очень незначительный успех, попав на сервер, каждый раз, когда вам нужно это проверить, но удобство его обслуживания во многих случаях стоит.