Ruby 确保字符串只包含int或float
如何在Ruby中编写正则表达式以确保字符串是唯一的整数。比如说Ruby 确保字符串只包含int或float,ruby,regex,Ruby,Regex,如何在Ruby中编写正则表达式以确保字符串是唯一的整数。比如说 3 --> Returns true 3g --> Returns False 4.3 --> Returns False 3 --> Returns False 3g --> Returns False 4.3 --> Returns True 类似地,如何编写正则表达式以确保它是float? 比如说 3 --> Returns true 3g --> Returns False
3 --> Returns true
3g --> Returns False
4.3 --> Returns False
3 --> Returns False
3g --> Returns False
4.3 --> Returns True
类似地,如何编写正则表达式以确保它是float?
比如说
3 --> Returns true
3g --> Returns False
4.3 --> Returns False
3 --> Returns False
3g --> Returns False
4.3 --> Returns True
我需要整型和浮点型的正则表达式。我认为对于int,它只是/\d+/和/\d+。\d+/对于float,但不起作用。检查它是否为整数:
str = "111"
if(str =~ /^\d+$/)
print "matched\n";
end
str = "4.3"
if(str =~ /^\d+\.\d+$/)
print "matched\n";
end
"3" !~ /\D/
"3g" !~ /\D/
"4.3" !~ /\D/
检查是否为浮动:
!!("3" =~ /\A\d+\.\d+\z/)
!!("3g" =~ /\A\d+\.\d+\z/)
!!("4.3" =~ /\A\d+\.\d+\z/)
检查是否为整数:
"3" !~ /\D/
"3g" !~ /\D/
"4.3" !~ /\D/
检查是否为浮动:
!!("3" =~ /\A\d+\.\d+\z/)
!!("3g" =~ /\A\d+\.\d+\z/)
!!("4.3" =~ /\A\d+\.\d+\z/)
你想要一个既匹配整数又匹配浮点数的正则表达式吗
/\A[-+]?\d+(\.\d+)?\z/
这与一系列数字(至少一个)匹配,可以选择后跟一个点和另一系列数字。您想要一个既匹配整数又匹配浮点的正则表达式吗
/\A[-+]?\d+(\.\d+)?\z/
这与一系列数字(至少一个)匹配,可以选择后跟一个点和另一系列数字。正则表达式不是解决此问题的最佳方法。覆盖所有可能性的最简单方法是使用尝试将字符串转换为
浮点值
,然后捕获异常:
def float?(str)
!!Float(str)
rescue ArgumentError
false
end
这将覆盖前导符号('+2.18'
,-3.14
),忽略前导和尾随空格,甚至处理浮点数的科学表示法。只使用<代码>内核>浮点的一个漏洞是,它不会理解<代码>“NAN' 作为<代码>浮点<代码>,即使<代码>浮点::NAN.ToSs=='NaN' 是真的,如果你想考虑<代码> 'NAN' >是<代码>浮点< /代码>,那么你可以做这样的事情:
def float?(str)
str.strip == 'NaN' || !!Float(str)
rescue ArgumentError
false
end
类似地,对于Float::INFINITY
/'INFINITY'
和-Float::INFINITY
//'-INFINITY'
如果要单独检查整数,还有一个问题。正则表达式不是解决此问题的最佳方法。覆盖所有可能性的最简单方法是使用尝试将字符串转换为浮点值
,然后捕获异常:
def float?(str)
!!Float(str)
rescue ArgumentError
false
end
这将覆盖前导符号('+2.18'
,-3.14
),忽略前导和尾随空格,甚至处理浮点数的科学表示法。只使用<代码>内核>浮点的一个漏洞是,它不会理解<代码>“NAN' 作为<代码>浮点<代码>,即使<代码>浮点::NAN.ToSs=='NaN' 是真的,如果你想考虑<代码> 'NAN' >是<代码>浮点< /代码>,那么你可以做这样的事情:
def float?(str)
str.strip == 'NaN' || !!Float(str)
rescue ArgumentError
false
end
类似地,对于Float::INFINITY
/'INFINITY'
和-Float::INFINITY
//'-INFINITY'
如果要单独检查整数,还有一个问题。这很容易。谢谢。:)那么'-3.1415927'
或'-11'
呢?另外,'3'
也是一个有效的浮点值。这很简单。谢谢。:)那么'-3.1415927'
或者'-11'
呢?同样,'3'
也是一个有效的浮点。那么'-3.1415927'
或者'-11'
呢?@muistooshort需要考虑,但是OP有一个正则表达式,表明不需要考虑负值。我认为是这样的。你是对的。但是OP不清楚。关于'-3.1415927'
或'-11'
?@muistooshort需要考虑,但是OP有一个正则表达式,表明不需要考虑负值。我认为是这样的。你是对的。但是OP不清楚。关于'-3.1415927'
或'-11'
?@muistooshort你说得对。我更新了正则表达式,因此如果数字前面有减号,它也会匹配。我可能会选择[-+]?
,\a
而不是^
,以及\z
而不是$
。使用<代码> ^ < /代码>和<代码> $>代码>当字符串包含换行符时,会有令人惊讶的行为。字符串中的换行符会导致验证失败,因此\A
和\z
才是正确的方法。那么'-3.1415927'
或'-11'
呢?@muistooshort你说得对。我更新了正则表达式,因此如果数字前面有减号,它也会匹配。我可能会选择[-+]?
,\a
而不是^
,以及\z
而不是$
。使用<代码> ^ < /代码>和<代码> $>代码>当字符串包含换行符时,会有令人惊讶的行为。字符串中的换行符会导致验证失败,因此\A
和\z
是一种可行的方法。这是最稳健的解决方案。这是最稳健的解决方案。