Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby 确保字符串只包含int或float_Ruby_Regex - Fatal编程技术网

Ruby 确保字符串只包含int或float

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

如何在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
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
是一种可行的方法。这是最稳健的解决方案。这是最稳健的解决方案。