Как распознать является ли string HTML страницей
Получаю данные по сети, после этого нужно проверить являются ли полученные данные просто строкой или же html строкой.
Ответы (2 шт):
Автор решения: Oleg Soloviev
→ Ссылка
В содержании страницы html есть указание на то, что это документ html. Можно просто проверить на вхождение, например так:
var str = "<!DOCTYPE html>"
let isHtml = str.contains("<!DOCTYPE html>") // true
let isHello = str.contains("hello") // false
Автор решения: schmidt9
→ Ссылка
Можно использовать регулярное выражение (на основе ответа)
import UIKit
// see https://stackoverflow.com/a/15459273/3004003
let htmlString =
"""
<a href=bla>sdfsdf</a>
<div>something</div>
<br>
<span>mayhem</div>
<hr />
<input name=bla / >
<div>some<span>thing</span>here</div>
"""
let nonHtmlString = "<bla bla // bla>"
let regexString = "<(br|basefont|hr|input|source|frame|param|area|meta|!--|col|link|option|base|img|wbr|!DOCTYPE).*?>|<(a|abbr|acronym|address|applet|article|aside|audio|b|bdi|bdo|big|blockquote|body|button|canvas|caption|center|cite|code|colgroup|command|datalist|dd|del|details|dfn|dialog|dir|div|dl|dt|em|embed|fieldset|figcaption|figure|font|footer|form|frameset|head|header|hgroup|h1|h2|h3|h4|h5|h6|html|i|iframe|ins|kbd|keygen|label|legend|li|map|mark|menu|meter|nav|noframes|noscript|object|ol|optgroup|output|p|pre|progress|q|rp|rt|ruby|s|samp|script|section|select|small|span|strike|strong|style|sub|summary|sup|table|tbody|td|textarea|tfoot|th|thead|time|title|tr|track|tt|u|ul|var|video).*?<\\/\\2>"
func isHTML(_ string: String) -> Bool {
guard let regex = try? NSRegularExpression(pattern: regexString, options: .caseInsensitive) else {
print("Error")
return false
}
return regex.firstMatch(in: string, options: [], range: NSRange(location: 0, length: string.count)) != nil
}
let res1 = isHTML(htmlString)
assert(res1 == true)
let res2 = isHTML(nonHtmlString)
assert(res2 == false)
print(res1, res2)