ValidateRegExp на стороне клиента и проблема на стороне сервера - PullRequest
0 голосов
/ 12 августа 2010

Я использую монорельс, activerecord и jquery.У меня есть форма с текстовым полем почтового индекса.У меня в классе активных записей, связанных с формой:

[Property]
        [ValidateNonEmpty]
        [ValidateRegExp(@"/^\d{5}(-\d{4})?$/", "Invalid")]
        public string ZipCode { get; set; }

Как вы видите, я использую атрибут ValidateRegExp, который затем автоматически генерирует правила проверки jQuery.Проблема в том, что регулярные выражения в javascript отличаются от C #.Javascript требует / до и после регулярного выражения, тогда как C # нет.Если я поставлю косые черты, тогда будет работать проверка jQuery, но если они пропустят проверку javascript и отправят форму с отключенным js (или если кто-то сохранит объект с помощью другого средства, например, тестового примера), то будет сказанонедействителен, потому что C # не любит косые черты.

Итак, мой вопрос, как вам угодить javascript и C # одним регулярным выражением?Я ожидаю, что он будет достаточно умен, чтобы добавлять косые черты до и после только для проверки jQuery, чтобы вы могли указать регулярное выражение в C # без косых черт, но это не так, как кажется.

Ответы [ 2 ]

1 голос
/ 12 августа 2010

Вы должны указать само регулярное выражение, без окружающих / символов.

Если у вас возникли проблемы со стороны клиента, было бы полезно, если бы вы включили ошибку JS, которую вы видите (если таковой имеется) и фактический сгенерированный код JS на странице, которую Monorail записывает на вашу страницу, а также версию используемого вами монорельса.

В качестве примечания, давайте рассмотрим генерацию кодаправило проверки JS из атрибута проверки в JQueryValidator.cs

соответствующий фрагмент находится в строке 378 (по состоянию на текущую версию кодовой базы):

           "function(value, element, param) { return new RegExp(param).test(value); }" 

что указывает на то, что используется new RegExp(expression), а не /expression/ формат.С этим - ясно, что интеграция JQuery с монорельсовой железной дорогой в порядке.

0 голосов
/ 12 августа 2010

Я использую jQuery 1.4.2.Не уверен, какую версию MonoRail я использую, dll Castle.MonoRail.Framework говорит v2.0.0.0.Я обновил его в течение последних 3 месяцев, хотя, так что он довольно новый.Js, который вы показываете, указывает, что у вас даже более новая версия, чем у меня, так как он генерирует для меня следующее (если в выражении ValidateRegExp нет косых черт):

"user.username": {требуется: true, regExp: ^ [\ w] {4,50} $}

Это, очевидно, дает синтаксическую ошибку в js, поскольку она не заключена в кавычки или косые черты.Я закончил тем, что создал новый валидатор RegExp с AbstractValidator в качестве базового класса, чтобы обойти неисправный, который есть в моей версии MonoRail.

Знаете ли вы, если это было исправлено в последней паремесяцы?В противном случае я не могу объяснить, как ваш генерирует новый RegExp в js, а мой нет ...

...