我试图保证CMS中的字段只包含 无序列表。例如,
<ul>
<li>
This is our first bullet point
</li>
</ul>
我使用以下内容来匹配:
String pattern = "^<ul>(<li>.*</li>)+</ul>$";
Regex rgx = new Regex(@pattern,
RegexOptions.IgnorePatternWhitespace
| RegexOptions.Multiline
| RegexOptions.IgnoreCase);
if(rgx.IsMatch(controlValidationValue)) { ... }
当html全部在一行上时会起作用,但是当我得到换行符或空格时就会失败 - 这可能会发生,因为我们的CMS使用富文本插件来创建html。
我尝试使用按位AND(而不是OR),并使用RegexOptions.SingleLine
进行播放,但无法解决问题的根源。
任何/所有帮助表示赞赏!
答案 0 :(得分:1)
一般情况下,我会使用HtmlAgilityPack
来解析HTML而不是正则表达式。
string html = @"<ul>
<li>
This is our first bullet point
</li>
</ul>";
var doc = new HtmlAgilityPack.HtmlDocument();
doc.LoadHtml(html.Trim()); // Trim to remove leading or trailing spaces if that's possible
bool valid = doc.DocumentNode.ChildNodes.Count == 1
&& doc.DocumentNode.ChildNodes[0].Name == "ul";