所以我试图使用RangeValidator来确保验证Int64的最小值和最大值。但是,我似乎唯一或最接近的选择是Double。
Dim Range As New RangeValidator
Range.ControlToValidate = "..."
Range.Type = ValidationDataType.Double
Range.MinValue = Int64.MinValue.ToString
Range.MaxValue = Int64.MaxValue.ToString
我不想使用自定义验证器。我想我可以使用一些疯狂的正则表达式...但只是试图理解为什么我不能这样做。
例如,Int64的最大值为:
9223372036854775807
但这证实了:
9223372036854775808
9223372036854775810
9223372036854775899
如果我跳过更大的数字,它将无法验证:
9223372036854799999
我认为这是因为Double发生了一些转换。
我确实看到System.Configuration中有一个LongValidator,但我试图避免创建一个CustomValidator类型,如果可能的话,它是一个不同的验证类型,因为不打算像RangeValidator那样使用。
所有这些对于学习目的而言都比其他任何事情更重要。我知道我可以跳过其他篮球,但希望能更清晰。
标记C#也是如此。忽略我的vb.net示例..根据问题不是很重要。将转换任何代码。
答案 0 :(得分:0)
我想澄清一些事情。 RangeValidator不使用 regularexpression验证双重。它使用正则表达式 从字符串中提取数字和十进制字符。然后呢 使用javascript将结果转换为实际数字 parseFloat()函数。如果那个功能无法转换,那么 RangeValidator知道javascript不接受该值。
我怀疑问题在于您分配的价值 对于javascript的浮点,MaximumValue太大了。我认为 两个.net的Double和javascript都是80位浮点数但它的 可能它们在最小和最大范围内略有不同。在任何 如果是这样,我建议您更改代码:
使用CompareValidator,Operator = DataTypeCheck,Type = Double。它将报告由于格式而导致的非法值或对于80位而言太大 号。
使用另一个CompareValidator,Operator = GreaterThanEqual,Type = Double,ValueToCompare =您的最小双倍。这将报告一个 如果有任何低于最小值的错误。最大值是在处理 其他验证者。
也许这就解释了为什么它验证不正确。
答案 1 :(得分:0)
除非有其他人想要插话,否则实际上我找到了这样做的一种方式,并且有一个自定义验证器。 System.configuration中有一个函数,它允许检查值是否有效" Long"。问题是,如果你想要客户端验证,似乎唯一有效的选择是使用正则表达式。否则,数字太大了,JavaScript将其解析为浮点数,正如Sam所说。
因此,我最终使用正则表达式来获得客户端和服务器端验证。