我正在尝试使用正则表达式验证文本框...
regex expression=(\d{0,4})?([\.]{1})?(\d{0,2})
我的小数点有问题。小数点是可选的。正则表达式应仅验证小数点后一位。
example 1.00 ,23.22 , .65 is valid
1.. or 23.. is invalid.
有什么改进我的正则表达式的建议吗?
我正在尝试使用正则表达式验证文本框...
regex expression=(\d{0,4})?([\.]{1})?(\d{0,2})
我的小数点有问题。小数点是可选的。正则表达式应仅验证小数点后一位。
example 1.00 ,23.22 , .65 is valid
1.. or 23.. is invalid.
有什么改进我的正则表达式的建议吗?
试试这个:^\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})?)?$
虽然您当然可以为此构造一个正则表达式,但检查数据类型或类似乎更简单,或者简单地扫描输入的小数然后计算它们。例如,使用 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