我有以下 Ruby 风格的正则表达式:
data.to_s.match(/\A[[:digit:]]*+((.|,)[[:digit:]]+)?\Z/) ? true : false
对于以下示例,这将按预期返回 true:
data = "13"
data = "1,3"
data = "13,3"
data = "1.3"
data = ",3"
data = ".3"
我不清楚的是为什么第一个 [[:digit:]] 之后的星号还允许在字符串的开头传递一个字符:
irb > "a3".match(/\A[[:digit:]]*+((.|,)[[:digit:]]+)?\Z/)
=> #<MatchData "a3" 1:"a3" 2:"a">
我怎样才能让它只匹配数字?