How to determine if a string is printable?

Is there an easy way to test if a string is printable (doesn’t contain
control characters)? Something easier than listing out all the letters,
numbers, and punctuation and checking each character.

Mike S.

if(string =~ /.[\a\b\e\f\n\r\t\v]./)
puts “Invalid string”
else
puts string + " is ok"
end

From: “Mike S.” [email protected]

Is there an easy way to test if a string is printable (doesn’t contain
control characters)? Something easier than listing out all the letters,
numbers, and punctuation and checking each character.

Based on:
http://blade.nagaokaut.ac.jp/cgi-bin/scat.rb/ruby/ruby-talk/248540

To test for non-printable characters, use:

str =~ /[^[:print:]]/

Regards,

Bill

Bill K. wrote:

str =~ /[^[:print:]]/

Even though I am not the OP I tried that and using index but none of
them seem to work. I get an error message saying “warning character
class has ‘[’ without escape” followed by “warning regexp has ‘]’
without escape” and the return is nil regardless what is in the string.
Is there something I am missing here?

Bill K. wrote:

Even though I am not the OP I tried that and using index but none of
irb(main):117:0> “abc\ndef” =~ /[^[:print:]]/
=> 3 # yes, a non-printable character was found at idx 3

irb(main):118:0> “abcdef” =~ /[^[:print:]]/
=> nil # no, a non-printable character was not found

OK, I see what I did. I forgot the trailing colon. Still getting used
to the language and regular expressions.

probably not exactly what you’re looking for but I use this quite often
for
white space removal:
" a".strip.empty?

From: “Michael W. Ryder” [email protected]

them seem to work. I get an error message saying “warning character
class has ‘[’ without escape” followed by “warning regexp has ‘]’
without escape” and the return is nil regardless what is in the string.
Is there something I am missing here?

Not sure. It works for me, without warnings even with ruby -w on:
ruby 1.8.4 (2005-12-24) [i386-mswin32]

And in IRB:

irb(main):117:0> “abc\ndef” =~ /[^[:print:]]/
=> 3 # yes, a non-printable character was found at idx 3

irb(main):118:0> “abcdef” =~ /[^[:print:]]/
=> nil # no, a non-printable character was not found

Regards,

Bill

On 5/16/07, Michael W. Ryder [email protected] wrote:

OK, I see what I did. I forgot the trailing colon. Still getting used
to the language and regular expressions.

Regular expression syntax is probably best thought of as a language of
it’s own. Or perhaps a family of languages since there are so many
dialects.


Rick DeNatale

My blog on Ruby
http://talklikeaduck.denhaven2.com/