SASS和SCSS变量名称的合法字符

Pet*_*erg 17 css sass

哪些字符在SCSS变量名中有效?

hop*_*per 22

如果你查看了SASS词法分析器的来源,你会看到:

# A hash of regular expressions that are used for tokenizing.
REGULAR_EXPRESSIONS = {
  :whitespace => /\s+/,
  :comment => COMMENT,
  :single_line_comment => SINGLE_LINE_COMMENT,
  :variable => /(\$)(#{IDENT})/,
  :ident => /(#{IDENT})(\()?/,
  :number => /(-)?(?:(\d*\.\d+)|(\d+))([a-zA-Z%]+)?/,
  :color => HEXCOLOR,
  :bool => /(true|false)\b/,
  :null => /null\b/,
  :ident_op => %r{(#{Regexp.union(*IDENT_OP_NAMES.map{|s| Regexp.new(Regexp.escape(s) + "(?!#{NMCHAR}|\Z)")})})},
  :op => %r{(#{Regexp.union(*OP_NAMES)})},
}
Run Code Online (Sandbox Code Playgroud)

其中引用IDENT单独文件中定义的字符集:

s = if Sass::Util.ruby1_8?
      '\200-\377'
    elsif Sass::Util.macruby?
      '\u0080-\uD7FF\uE000-\uFFFD\U00010000-\U0010FFFF'
    else
      '\u{80}-\u{D7FF}\u{E000}-\u{FFFD}\u{10000}-\u{10FFFF}'
    end

H = /[0-9a-fA-F]/
UNICODE = /\\#{H}{1,6}[ \t\r\n\f]?/

NONASCII = /[#{s}]/
ESCAPE = /#{UNICODE}|\\[ -~#{s}]/
NMSTART = /[_a-zA-Z]|#{NONASCII}|#{ESCAPE}/
NMCHAR = /[a-zA-Z0-9_-]|#{NONASCII}|#{ESCAPE}/

IDENT = /-?#{NMSTART}#{NMCHAR}*/
Run Code Online (Sandbox Code Playgroud)

因此,看起来变量名称可以包含:

  • 任何ASCII字母.
  • 任意数字0-9(只要它不是名称中的第一个字符).
  • 下划线和连字符.
  • ASCII标点符号(!"#$%&'()*+,./:;<=>?@[]^{|}~)和空格,如果使用反斜杠进行转义.
  • 在所述范围的Unicode字符0080-D7FF,E000-FFFD10000-10FFFF.
  • Unicode十六进制转义序列,如\00E4.

  • @lytnus这是正确的; 如答案中所述,如果在变量名中使用,则必须使用反斜杠转义ASCII标点符号(例如`$ foo\+ bar\<baz`有效,但不是`$ foo + bar <baz`).我不确定为什么这会有用,但语法允许它. (4认同)
  • 顺便说一句,为了方便每个人,一个与必须替换的ASCII标点符号匹配的正则表达式如下:/ ["!#$%&\'()*+,.\/;; <=>?@\[ \] ^\{\} |〜] /克 (3认同)