Ошибка броска валидатора - PullRequest
1 голос
/ 08 сентября 2010

У меня есть следующий RegularExpressionValidator на одной из моих страниц:

<asp:RegularExpressionValidator ID="RegularExpressionValidator2" runat="server" 
                                        ControlToValidate="InKindTextBox"
                                        ErrorMessage="The value entered for 'Cash' must be in a number format.   Examples: 500.00, 500, $500, $50,000 or $500.00" 
                                        ValidationExpression="(?n:(^\$?(?!0,?\d)\d{1,3}(?=(?<1>,)|(?<1>))(\k<1>\d{3})*(\.\d\d)?)$)" >

Но когда он пытается проверить это, выдает ошибку ниже с одной из моих динамических страниц JS.*

Когда я запускаю это регулярное выражение через regex texter , оно работает нормально.Я что-то здесь не так делаю?

Ответы [ 2 ]

3 голосов
/ 08 сентября 2010

Я думаю, что ваше регулярное выражение слишком сложно в любом случае.Я бы использовал что-то более простое, например

^[1-9]\d*(\.\d*)?$

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

Редактировать

^\$?([1-9]\d?\d?((,\d{3})*|(\d{3})*)|0?)(\.\d*)?$

Для проверки

var r = /^\$?([1-9]\d?\d?((,\d{3})*|(\d{3})*)|0?)(\.\d*)?$/;
var shouldMatch = ["$30,000.00", "30,000.00", "9,000.00", "9000", "1", ".12"];
var shouldntMatch = ["30,000000.00", "1.00c", "19,00.00", "$30,00"];
function test1() {
  for (var i in shouldMatch) {
    if (!r.exec(shouldMatch[i])) {
      alert(shouldMatch[i]);
      return;
    }
  }
}
function test2() {
  for (var i in shouldntMatch) {
    if (r.exec(shouldntMatch[i])) {
      alert(shouldntMatch[i]);
      return;
    }
  }
}
test1();
test2();
2 голосов
/ 08 сентября 2010

JavaScript использует другой синтаксис регулярных выражений, чем .NET.См., Например, эту страницу .

Цитата из MSDN RegularExpressionValidator page :

Реализация проверки регулярного выражения немного отличаетсяна клиенте, чем на сервере.На клиенте используется синтаксис регулярных выражений JScript.На сервере используется синтаксис System.Text.RegularExpressions.Regex.Так как синтаксис регулярного выражения JScript является подмножеством синтаксиса System.Text.RegularExpressions.Regex, рекомендуется использовать синтаксис регулярного выражения JScript для получения одинаковых результатов как на клиенте, так и на сервере.

Обновление: Подробное сравнение вариантов регулярных выражений во многих языках, включая .NET и JavaScript, можно найти здесь .

Обновление 2: Ниже приведено регулярное выражение, которое должно проверять ввод валюты с использованием регулярного выражения, совместимого с jScript:

                        <asp:RegularExpressionValidator ID="RegularExpressionValidator1" runat="server" 
                                    ControlToValidate="CashTextBox" ValidationGroup="vld_Insert"
                                    ErrorMessage="The value entered for 'Cash' must be in a number format.  Examples: 5000, 5000.00, 5,000 or $5,000.00" 
                                    ValidationExpression="^\s*\$?\s*(?!\d{4,},)(\d|\d{1,3},(?=\d{3})(?!\d{4}))*(\.\d{1,2})?\s*$">
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...