代码之家  ›  专栏  ›  技术社区  ›  Alastair Pitts

csv的条件正则表达式测试

  •  1
  • Alastair Pitts  · 技术社区  · 14 年前

    我正在ASP.NET MVC中进行一些客户端验证,我发现自己正在尝试对一组项进行条件验证(即,如果选中复选框,则验证,反之亦然)。至少可以说,这是个问题。

    为了解决这个问题,我认为我可以通过拥有一个隐藏元素来“欺骗”,该元素将包含每个集合的所有信息,因此一个包含这些信息的csv字符串的想法。

    我已经使用自定义 [HiddenRequired] 属性来验证隐藏的输入是否包含一个值,成功了,但是我认为因为我需要验证csv中的每一个数据块,所以正则表达式可以解决这个问题。

    我的正则表达式工作非常弱,经过两个小时的努力,我几乎已经放弃了。

    这是csv字符串的一个示例:

    对,3,24,大于0.5

    解释:

    • 如果为真,则表示是否应验证其余部分。我需要使用这个有条件地在regex中切换
    • 3和24是整数,并且只会落在0-24的范围内。
    • over是一个字符串,将 over under
    • 0.5是一个精度未知的十进制值。

    在验证中,所有值都应该存在,并且至少是正确的类型

    有没有人可以提供这样的正则表达式,或者至少提供一些提示,我真的被卡住了!

    2 回复  |  直到 14 年前
        1
  •  2
  •   Jens    14 年前

    试试这个正则表达式:

    @"^(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
    ");
    
        2
  •  1
  •   Darin Dimitrov    14 年前

    我可能会用 Split(',') 并验证结果数组的元素,而不是使用regex。你也应该注意 \, 大小写(逗号是值的一部分)。