【发布时间】:2017-01-14 01:20:04
【问题描述】:
我使用的是 Ruby 2.4。如何检查字符串是否不包含任何数字?我正在尝试这个
2.4.0 :002 > line = "abcdef"
=> "abcdef"
2.4.0 :007 > line =~ /^^[0-9]+$/
=> nil
我认为“^”是“非”字符,但我不确定它是如何工作的,因为我知道它也是短语的起始字符。无论如何,感谢您的帮助,-
【问题讨论】:
我使用的是 Ruby 2.4。如何检查字符串是否不包含任何数字?我正在尝试这个
2.4.0 :002 > line = "abcdef"
=> "abcdef"
2.4.0 :007 > line =~ /^^[0-9]+$/
=> nil
我认为“^”是“非”字符,但我不确定它是如何工作的,因为我知道它也是短语的起始字符。无论如何,感谢您的帮助,-
【问题讨论】:
^ 在方括号列表的开头否定一组字符:
[^abc] # not a, b, or c
所以你只需要把它移到括号内:
line =~ /^[^0-9]+$/
请注意,您可能需要\A 和\z 而不是^ 和$,因为它们匹配整个字符串的开头和结尾而不是行,并且\D 是[^0-9] 的缩写.
line =~ /\A\D+\z/
您也可以对数字进行否定检查。
line !~ /\d/
【讨论】:
+ 并考虑使用 \d 。
/^\d+$/ 不会匹配2blah,所以它的否定应该。
\A 而不是^ 也是一个好习惯,因为它锚定到字符串的开头,而不是行的开头。区别可能非常非常重要:"foo\n123".match(/^\d+$/) 确实匹配,即使您认为它不匹配。
/^^[0-9]+$/,以至于我没有阅读问题。对不起。
你可以像这样使用match?:
'abcdef'.match?(/\d/)
#=> false
【讨论】:
? 是一个错字,但它看起来像是 2.4.0 的新内容。非常好。
+ 这里不需要,是吗?