Ruby:检查字符串是否只包含多个数值

时间:2016-04-06 18:59:56

标签: ruby regex string

我需要测试字符串是否包含至少一个数值。 我需要使用$tests = Test::where(function($test) { return $test->questions->count() > 3; })->get(); 和其他测试创建一个正则表达式。

例如:

\d

需要从我的数据库中删除。 但不是:

"1"
"2 3"
" 3 4  567 "

我想删除仅包含数字和空格的记录。

4 个答案:

答案 0 :(得分:3)

试试这个

^[\d\s]+$

Regex demo

希望得到这个帮助。

答案 1 :(得分:2)

使用此RegEx:

^[\d\s]+$

Live Demo on Regex101

工作原理:

^          # String starts with ...
[\d\s]     # Digit of Whitespace
+          # Repeated 1 or more times
$          # ... String ends with

我没有使用[\d\s]*的原因是因为这会匹配一个空字符串

以上版本将匹配一个充满空格的字符串。您可以使用此更安全的版本来阻止这种情况发生:

(?!^\s+$)^[\d\s]+$

这使用否定前瞻(?!))来检查字符串是否只包含空格(),如果匹配则匹配将失败。

Live Demo on Regex101

答案 2 :(得分:2)

无需使用正则表达式。使用常规字符串方法:

def should_delete?(string)
  string.delete('0123456789 ').empty?
end

should_delete? " 3 4  567 "        # => true
should_delete? "2 & 3 cheese cake" # => false

如果要强制执行至少一个数字(根据接受的答案似乎不是这种情况),您可以将原始字符串限制为仅仅为空格:

def should_delete?(string)
  string.delete('0123456789 ').empty? and not string.strip.empty?
end

答案 3 :(得分:1)

小心使用[...] *的响应,因为它不会匹配任何内容。' *'表示0或更多。 Rubular是测试红宝石正则表达式的一种出色方式。

正则表达非常棒而且[+] +对我来说很好看。但是如果你对非正则表达式的ruby方法感兴趣的话:

def bad_things
  [*0..9].map(&:to_s) << " "
end

def bad_word?(word)
  word.chars.all? { |char| bad_things.include?(char) }
end

第一种方法是使用&#34; 0&#34;创建一个数组。通过&#34; 9&#34;还有一个空间。