在正则表达式字符串中查找任意两个句点和任何非数字字符

时间:2014-03-08 19:37:29

标签: ruby regex

我很接近,我只需要一些关于正确的提示。 基本上我想要返回true,如果我有字符串1.0,但如果我有字符串1..0或除数字以外的任何字符,则返回false。

所以我需要匹配除数字以外的任何字符,但我也可以匹配2个或更多句点。

EX:

1.0 => true
2.000004 => true
foobar => false
2..0 => false
2 => true
2.0.0.0.0 => false

我目前一直在玩弄这个:/ [ - zA-Z] |。{2,} /

我的翻译是它匹配任何字母或任何2个句点.. 它可以工作,但它只匹配2个连续的周期,所以发生以下情况

2.0.0.0.0 => true (I want to be false, as in I want to match this)

我想使用\ D而不是[a-zA-Z]来避免任何奇怪的ASCII字符,但是句点在\ D的子集中但不在[a-zA-Z]中

任何提示?谢谢!

2 个答案:

答案 0 :(得分:0)

我已经测试了所有选项

^\.{1}?[0-9]*\.{1}?[0-9]+$

http://rubular.com/r/5ll1Grhy6H

如果您需要负数:

^[.-]{1}?[0-9]*\.{1}?[0-9]+$

http://rubular.com/r/LLOjq1pIUY

答案 1 :(得分:0)

这是一种相反的方法:

/\.{2,}|[^\d\.-]|(\d\.){2,}|\.\z|.-/

这个正则表达式会发现"不正确"字符串,包含:

  • 两个或多个彼此靠近的点
  • 不是的字符:数字,点,短划线(负数)
  • 两个或更多组"数字点" (如2.0.0.0.0)
  • 点作为最后一个字符
  • 不在第一个位置

此比较中返回true的所有字符串

string !~ /\.{2,}|[^\d\.-]|(\d\.){2,}|\.\z|.-/

应该是有效数字(浮点数或整数)