Как распознать является ли 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)
→ Ссылка