我需要测试字符串是否包含至少一个数值。
我需要使用$tests = Test::where(function($test) {
return $test->questions->count() > 3;
})->get();
和其他测试创建一个正则表达式。
例如:
\d
需要从我的数据库中删除。 但不是:
"1"
"2 3"
" 3 4 567 "
我想删除仅包含数字和空格的记录。
答案 0 :(得分:3)
答案 1 :(得分:2)
使用此RegEx:
^[\d\s]+$
工作原理:
^ # String starts with ...
[\d\s] # Digit of Whitespace
+ # Repeated 1 or more times
$ # ... String ends with
我没有使用[\d\s]*
的原因是因为这会匹配一个空字符串
以上版本将匹配一个充满空格的字符串。您可以使用此更安全的版本来阻止这种情况发生:
(?!^\s+$)^[\d\s]+$
这使用否定前瞻((?!)
)来检查字符串是否只包含空格(),如果匹配则匹配将失败。
答案 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;还有一个空间。