On Sun, 27 Oct 2002 02:00:55 +0900, Guy Decoux (ts) <decoux / moulon.inra.fr> wrote: > match[0].split(/[- ]?/).each_with_index do |x, i| > # warning `i' will take the values 0 .. 9 > end Merci bien. Not only does this remove the need of a lengthy pattern, it also allows for a more readable implementation. I post it because IIRC some people have shown interest in validating ISBNs. |def validate_isbn! | match = /(\d[- ]?){9,9}([0-9xX])/.match(@isbn) | if match == nil | return 'ISBN pattern mismatch' | end | @isbn = '' | checksum = 0 | match[0].split(/[- ]?/).each_with_index { |char, index| | case char | when 'X', 'x' | checksum += 10 | @isbn += 'X' | else | checksum += (10 - index) * char.to_i | @isbn += char | end | } | (checksum.remainder(11) == 0 ? '' : 'in') + 'valid checksum' |end Josef 'Jupp' Schugt