Запретить пробелы в регулярном выражении .NET

Я пытаюсь проверить числа, имеющие максимум 3 десятичных цифры.

Мое регулярное выражение ^\d+([.,]\d{1,3})?$

Я игнорирую культурные различия в языке (свойство CultureInvariant имеет значение true), поэтому я добавил «,» в выражение.

Я пробовал следующие тесты:

  1. 1000 (Ввод: правильно; результат: Пройдено)
  2. 0, (Ввод: неправильный; результат: не удалось)
  3. 1.111 (Ввод: правильно; результат: Пройдено)
  4. пробелы (ввод: неверно; результат: пройдено)

Даже со знаками ^ и $ он позволяет пользователю вводить пробелы и не показывает мою ошибку проверки.

Что происходит не так?

ОБНОВИТЬ:

Ниже приведен мой код в файле aspx:

<td>
<asp:TextBox ID="txtBuildingSize" CssClass="textbox" runat="server" 
 ToolTip="in Sq Ft" meta:resourcekey="txtBuildingSizeResource1"></asp:TextBox>
<asp:Label ID="lblSqM1" runat="server" CssClass="optionLabel" 
meta:resourcekey="lblSqM1Resource1" Text="square meters"></asp:Label>
</td>
<td>
<asp:RegularExpressionValidator ID="strBuildingSizeValidator" 
  ControlToValidate="txtBuildingSize" Display="Dynamic"
  runat="server" ForeColor="Red" ValidationExpression="^\d+([.,]\d{1,3})?$" 
  meta:resourcekey="strBuildingSizeValidatorResource1" 
  Text="* Max 3 decimals only"></asp:RegularExpressionValidator>

ОБНОВЛЕНИЕ 2: я попытался проверить это снова. Регулярное выражение работает нормально. Он не позволяет вводить данные в форму, пока я не удалю пробелы из текстовых полей. Теперь единственная проблема заключается в том, что он не показывает ошибку проверки при попытке ввести пробелы.

Решено: ^\d+([.,]\d{1,3}\ {0,0})?$

(пробел){0,0} сделал свое дело. Появляется сообщение об ошибке.


person Community    schedule 30.01.2014    source источник
comment
Это регулярное выражение кажется действительным и не должно допускать пробелов. Вы уверены, что запускаете его в случае ввода пробела? Отладить и проверить.   -  person Haney    schedule 30.01.2014
comment
Я использовал один пробел. Затем я попытался удерживать пробел, но ни в одном из случаев он не пытался снять ошибку проверки. Я попытался использовать код javascript для отключения с помощью пробела, и, похоже, это сработало. Но мне любопытно, почему регулярное выражение (с включенным javascript) все еще не работает.   -  person    schedule 30.01.2014
comment
Итак, ваша проблема с JS на стороне КЛИЕНТА?   -  person Haney    schedule 30.01.2014
comment
Я предполагаю, что да. Я не получаю соответствующих результатов, даже если я сменю браузер на Mozilla Firefox.   -  person    schedule 30.01.2014
comment
Ваше выражение верно. Похоже, вы неправильно понимаете применение выражения Regex.   -  person Haney    schedule 30.01.2014
comment
этот вопрос касается Regex, а не ввода формы. Начните новый вопрос для этого.   -  person Haney    schedule 30.01.2014


Ответы (1)


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

Код:

var pattern = @"^\d+([.,]\d{1,3})?$";
var examples = new string[] { "1000", "0", "1.111", "1 1" };
var regEx = new Regex(pattern, RegexOptions.IgnoreCase);

foreach(var ex in examples)
{
    var match = regEx.Match(ex);

    if(match.Success)
        Console.WriteLine("Input: '"+ ex + "'; result: Passed");
    else
        Console.WriteLine("Input: '"+ ex + "'; result: Failed");
}

Выход:

Ввод: '1000'; результат: Пройдено

Ввод: '0'; результат: Пройдено

Ввод: «1,111»; результат: Пройдено

Ввод: '1 1'; результат: не удалось

Вход: ' '; результат: не удалось

Возможно, есть что-то еще, что вызывает это?

Обновлять:

Я даже проверил это в событии TextChanged в текстовом поле WPF следующим образом:

var pattern = @"^\d+([.,]\d{1,3})?$";
var regEx = new Regex(pattern, RegexOptions.IgnoreCase);

SearchTextBox.TextChanged += (o, e) => 
{
    var match = regEx.Match(SearchTextBox.Text);
    SearchTextBox.Background = match.Success ? Green : Red;
}

С того момента, как я набираю пробел, текстовое поле становится красным.

person Abbas    schedule 30.01.2014
comment
Большое спасибо за проверку моего выражения. Я тоже озадачен. Я использую ASP.NET (4.0) VB в Visual Studio 2010. Мой браузер — Google Chrome. Я также пытался использовать Mozilla Firefox, но он по-прежнему допускает пробелы. - person ; 30.01.2014