Условное регулярное выражение для тестирования CSV - PullRequest
1 голос
/ 14 апреля 2010

Я выполняю некоторую проверку на стороне клиента в ASP.NET MVC и обнаружил, что пытаюсь выполнить условную проверку для набора элементов (т. Е. Если флажок установлен, то выполнить проверку и наоборот). Это было проблематично, если не сказать больше.

Чтобы обойти это, я решил, что могу «обмануть», имея скрытый элемент, который будет содержать всю информацию для каждого набора, таким образом, идея строки CSV, содержащей эту информацию.

Я уже использую пользовательский атрибут [HiddenRequired] для проверки, содержит ли скрытый ввод значение, но я подумал, что мне нужно будет проверить каждый фрагмент данных в CSV, что регулярное выражение решит эту проблему.

Моя работа с регулярными выражениями очень слабая, и после двух часов я почти сдался.

Это пример строки csv:

правда, 3,24, более, 0,5

объяснить:

  • Значение true означает, что мне следует проверить все остальное. Мне нужно условно включить регулярное выражение с помощью этого
  • 3 и 24 являются целыми числами и всегда будут находиться в диапазоне 0-24.
  • over является строкой и будет over или under
  • 0.5 - десятичное значение с неизвестной точностью.

В проверке должны присутствовать все значения и, по крайней мере, правильного типа

Есть ли кто-то, кто может предоставить такое регулярное выражение или хотя бы дать несколько подсказок, я действительно застрял!

Ответы [ 2 ]

2 голосов
/ 14 апреля 2010

Попробуйте это регулярное выражение:

@"^(true,([01]?\d|2[0-4]),([01]?\d|2[0-4]),(over|under),\d+\.?\d+|false.*)$"

Я попытаюсь объяснить это с помощью комментариев. Не стесняйтесь спрашивать, если что-то неясно. =)

@"
  ^             # start of line
   (
     true,                # literal true
    ([01]?\d              # Either 0, 1, or nothing followed by a digit
        |                 # or
     2[0-4]),             # 20 - 24
    ([01]?\d|2[0-4]),     # again
    (over|under),         # over or under
    \d+\.?\d+             # any number of digits, optional dot, any number of digits

   |           #... OR ... 

     false.*              # false followed by anything
   )
  $            # end of line
");
1 голос
/ 14 апреля 2010

Я бы, вероятно, использовал Split(',') и проверял элементы результирующего массива вместо использования регулярного выражения Также следует следить за регистром \, (запятая является частью значения).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...