4

我正在尝试使用正则表达式验证文本框...

  regex expression=(\d{0,4})?([\.]{1})?(\d{0,2})

我的小数点有问题。小数点是可选的。正则表达式应仅验证小数点后一位。

    example 1.00 ,23.22 , .65 is valid
    1..  or  23.. is invalid.

有什么改进我的正则表达式的建议吗?

4

2 回答 2

5

试试这个:^\d{1,4}(\.\d{1,2})?$

它应该匹配:

1
200
9999
12.35
522.4

但不是 :

1000000
65.
.65
10.326
65..12

编辑 :

如果你想匹配 65. 或 9999. 使用这个代替(见评论):

^\d{1,4}(\.(\d{1,2})?)?$
于 2012-08-05T04:04:10.923 回答
0

改用应用程序逻辑

虽然您当然可以为此构造一个正则表达式,但检查数据类型或类似乎更简单,或者简单地扫描输入的小数然后计算它们。例如,使用 Ruby:

  • 检查该值是浮点数还是整数。

    # Literal value is a float, so it belongs to the Float class.
    value = 1.00
    value.class == Fixnum or value.class == Float
    => true
    
    # Literal value is an integer, so it belongs to the Fixnum class.
    value = 23
    value.class == Fixnum or value.class == Float
    => true
    
  • 计算小数并确保不超过一个。

    # Literal value is a float. When cast as a string and scanned,
    # only one decimal should be found.
    value = 23.22
    value.to_s.scan(/\./).count <= 1
    => true
    
    # The only way this could be an invalid integer or float is if it's a string.
    # If you're accepting strings in the first place, just cast all input as a
    # string and count the decimals it contains.
    value = '1.2.3'
    value.to_s.scan(/\./).count <= 1
    => false
    
于 2012-08-05T04:32:30.227 回答