( Обновление: основное внимание в этом вопросе уделяется проверке части "ничего другого")
Учитывая строку s, которая может содержать все, что является наиболее правильным регулярным выражением в Ruby, чтобы проверить, является ли оно одной цифрой и ничем иным? (одна цифра и только одна цифра).
Использование /\A\d\z/
/\A\d\z/
irb(main):001:0> "asd\n7\n" =~ /\A\d\Z/ => nil # works as false irb(main):002:0> "asd\n7\n" =~ /\A\d\z/ => nil # works as false irb(main):083:0> "7\n"=~/\A\d\Z/ => 0 # \Z fails, need \z irb(main):084:0> "7\n"=~/\A\d\z/ => nil # works as false irb(main):005:0> "7" =~ /\A\d\Z/ => 0 # works as true irb(main):006:0> "7" =~ /\A\d\z/ => 0 # works as true
http://www.zenspider.com/Languages/Ruby/QuickRef.html:
\z end of a string \Z end of a string, or before newline at the end
Попробуйте /\A\d(?![\S\W])/?
/\A\d(?![\S\W])/
irb(main):016:0> "7" =~ /\A\d(?![\S\W])/ => 0 irb(main):017:0> "7\n" =~ /\A\d(?![\S\W])/ => nil irb(main):018:0> "aljda\n7\n" =~ /\A\d(?![\S\W])/ => nil irb(main):022:0> "85" =~ /\A\d(?![\S\W])/ => nil irb(main):023:0> "b5" =~ /\A\d(?![\S\W])/ => nil
s.scan(/\b\d\b/) irb(main):001:0> "7\n" =~ /\b\d\z/ => nil irb(main):002:0> "7" =~ /\b\d\z/ => 0
^\d$
^ - начало строки, \d - цифра и $ - конец строки
^
\d
$
ПРИМЕЧАНИЕ : как указано в комментариях ^ и $ работают как для строк, так и для строк, поэтому, если вы планируете использовать многострочный ввод, вы должны использовать \A и \Z
\A
\Z