2017-01-14 8 views
0

私はRuby 2.4を使用しています。文字列に数字が含まれていないかどうかを確認するにはどうすればよいですか?私は、「^」は「ありません」の文字だと思ったが、私は、私は、それはまた、文字を開始フレーズです知っているので、それがどのように動作するかわからないんだけど、この文字列に数字が含まれていない場合、正規表現で私に教えてくれないのはなぜですか?

2.4.0 :002 > line = "abcdef" 
=> "abcdef" 

2.4.0 :007 > line =~ /^^[0-9]+$/ 
=> nil 

をしようとしています。とにかく、ヘルプは、感謝される -

答えて

5

^をするとき平方括弧リストの先頭に文字のセットを否定しますあなたは括弧の中にそれを移動する必要があります:

line =~ /^[^0-9]+$/ 

^$の代わりに\A\zが必要であることに注意してください。これは、行ではなく文字列全体の開始と終了に一致し、[^0-9]の略です。

line =~ /\A\D+\z/ 

数字の否定チェックを行うこともできます。

line !~ /\d/ 
+0

良いですが、否定的な先読みの言及はあなたの答えを弱める。ネガティブテストでなぜアンカーか '+'が必要なのか分かりませんし、 '\ d'の使用を検討します。 –

+0

@CarySwoveland:良い点;私は少し拡大しようとした。アンカーは '/^\ d + $ /'が '2blah'にマッチしないので、アンバーは否定です。 – Ryan

+0

'\ A'は文字列の先頭に固定されていて、行頭ではないので'^'に優先して使うのも良い習慣です。 '' foo \ n123 ".match(/^\ d + $ /)'はそれがそうではないと思っても一致します。 – tadman

2

あなたはこのようなmatch?を使用することができますので、

[^abc] # not a, b, or c 

'abcdef'.match?(/\d/) 
#=> false 
+0

hh。私は後ろの '?'が最初は入力ミスであると思っていましたが、それは2.4.0のように新しいようです。非常に素晴らしい。 – Glyoko

+0

@ Glyoko彼らは、あなたがマッチの詳細を気にしない場合には、それが起こったということだけを追加しました。その場合はもっと速くなければなりません。 – tadman

+0

ライアンの答えを読んで、私は実際に質問された質問に答えなかったことに気付きました。それにもかかわらず、この光沢のある新しい方法はまだここでは関連しているので、私は答えを残しておきます。 –

関連する問題