escaping a string in Ruby

后端 未结 4 579
有刺的猬
有刺的猬 2021-02-05 16:39

I want to insert the following as the value for a variable in some Ruby:

`~!@#$%^&*()_-+={}|[]\\:\";\'<>?,./

Surrounding this in doub

4条回答
  •  逝去的感伤
    2021-02-05 17:27

    Don't use multiple methods - keep it simple.

    Escape the #, the backslash, and the double-quote.

    irb(main):001:0> foo = "`~!@\#$%^&*()_-+={}|[]\\:\";'<>?,./"
    => "`~!@\#$%^&*()_-+={}|[]\\:\";'<>?,./"
    

    Or if you don't want to escape the # (the substitution character for variables in double-quoted strings), use and escape single quotes instead:

    irb(main):002:0> foo = '`~!@#$%^&*()_-+={}|[]\\:";\'<>?,./'
    => "`~!@\#$%^&*()_-+={}|[]\\:\";'<>?,./"
    

    %q is great for lots of other strings that don't contain every ascii punctuation character. :)

    %q(text without parens)
    %q{text without braces}
    %Q[text without brackets with #{foo} substitution]
    

    Edit: Evidently you can used balanced parens inside %q() successfully as well, but I would think that's slightly dangerous from a maintenance standpoint, as there's no semantics there to imply that you're always going to necessarily balance your parens in a string.

提交回复
热议问题