验证CSS是否为有效语法

3
有哪些指南可以用于CSS,以确保至少在语法方面有效。我想到的四个检查是确保至少存在一个"{", "}", ";"和":",如果存在,确保"{"和"}"的数量匹配以及";"和":"的数量匹配。我还会检查它是否以"."开头,并以";}"结尾,其中包括所有可能的空格组合。
除此之外,还有其他检查可以运行,以确保它是有效的语法吗?
或者更好的是,有没有正则表达式可用来验证这一点?我对正则表达式非常陌生,但似乎能够处理我提到的所有检查。

为什么不直接使用http://jigsaw.w3.org/css-validator/呢? - Kenny
+1 是一种有趣的启发式问题。 - Daniel Brockman
1
你为什么要这样做? - thirtydot
我猜最容易让你卡住的是字符串。注释相对容易去除,但字符串会迫使你做一些小状态机。 - Daniel Brockman
1
我有一个网站,我的老板希望用户能够自定义,添加CSS是他们提出的一种方式之一。在输入时验证语法似乎是个好主意。我在页面上放置了一个警告,试图吓退普通用户尝试使用CSS,并让他们知道不要在提交的CSS中包含注释。 - Mike_OBrien
2个回答

4

我能想到的最简单适合的正则表达式是:

(([.#]?[a-zA-Z_-0-9]+\ *)+\{([a-zA-Z-])+\ *\:[^;]+;\})+

它不考虑@charset ...;指令和注释(\* ... *\), 也不检查url(...)中的大括号和content: "..."中的引号对, 但如果需要,您可以尝试自己添加这些内容。

“[a-zA-Z_-0-9]”中的“_-”部分是用来做什么的?最初我遇到了一个错误,当我删除了“_-”后它就消失了。一旦我把它拿掉,它就完美地满足了我的需求。虽然其他人指出这不是完整的验证,但为此而使用第三方工具并不值得花费时间。 - Mike_OBrien
“-” 是字符范围指示器。一些正则表达式引擎可以理解在这种情况下,“_-0-9” 表示“_”,“-”,0 到 9,但您正在使用的引擎在未用于表示字符范围时需要对 “-” 进行转义。 - mauhiz
它支持!important吗? - Shimmy Weitzhandler
请注意,这个声明会失败: background-image: url(bad_unclosed_parens; - Augie Gardner

3

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接