2014-10-23 2 views
0

Я использую следующий шаблон регулярного выражения для проверки строки, содержащей html.C# regex check string содержит html

string input = "<a href=\"www.google.com\">test</a>"; 
const string pattern = "</?\\w+((\\s+\\w+(\\s*=\\s*(?:\".*?\"|'.*?'|[^'\">\\s]+))?)+\\s*|\\s*)/?>"; 
Regex reg = new Regex(pattern); 
var matches = reg.Matches(input); 

Он отлично работает, но если значение текстовая строка содержит < или> он возвращает истину, тоже, но это не должно быть. Например, следующее не считается тегом HTML в нашей системе.

string input = "<test>"; 

Как я могу добавить к этому образцу ап и для </ и />

Благодарности

+0

почему бы вам не просто использовать 'string.Contains () 'метод, предоставленный вам в C#, почему все сложнее пытаться выяснить ваш RegEx, когда вы могли бы получить результаты с одной строкой. Просто любопытно .. – MethodMan

+1

Я верю http://stackoverflow.com/a/1732454/603384 здесь. –

ответ

3

Я не хотел бы использовать регулярное выражение для разбора или проверки HTML. Вы можете использовать HtmlAgilityPack:

string input = "<a href=\"www.google.com\">test</a>"; 

var doc = new HtmlAgilityPack.HtmlDocument(); 
doc.LoadHtml(input); 
bool isValidHtml = doc.ParseErrors.Count() == 0; // true 

Если вы хотите разрешить только определенные теги можно создать белый список разрешенных тегов:

var whiteList = new List<string> { "a", "b", "img", "#text" }; //fill more whitelist tags 
bool isValidHtmlAndTags = doc.ParseErrors.Count() == 0 && doc.DocumentNode.Descendants() 
    .All(node => whiteList.Contains(node.Name)); 
+0

Это очень большой проект, я не могу добавить библиотеку или компонент самостоятельно, поэтому мне нужно сделать это с помощью регулярного выражения. – Salim

Смежные вопросы