如何检查字符串内容中是不是包含任何 HTML?
Posted
技术标签:
【中文标题】如何检查字符串内容中是不是包含任何 HTML?【英文标题】:How to check if string contents have any HTML in it?如何检查字符串内容中是否包含任何 HTML? 【发布时间】:2012-06-02 10:19:46 【问题描述】:我不擅长正则表达式,所以我想要一个名为“is_html
”的函数来检查这个。 :) 谢谢!
【问题讨论】:
“html 内容”是什么意思? 快速谷歌搜索出现preprocess.me/comment/91 HTML 标签,特定的 HTML 字符,如 , ", ', =is_html()
函数应该为以下字符串返回什么:(1)"I think that 12<20."
(2)"#*D<#(@>"
(3)"this=that"
(4)"hello<there>bob"
我以为我发布的链接是切肉刀诶
【参考方案1】:
如果你想测试一个字符串是否包含"<something>"
,(这是懒惰但可以为你工作),你可以尝试这样的事情:
function is_html($string)
return preg_match("/<[^<]+>/",$string,$m) != 0;
【讨论】:
你知道不用正则表达式就可以准确地表示这个表达式吗?我正在使用相同的表达式,并对正则表达式与非正则表达式的区别感到好奇。 简单、优雅、漂亮的 hack,我喜欢。 @IanWood - 不是真的。以I <3 PHP
为例 - 如果使用像 strlen(strip_tags($string)) !== strlen($string)
这样的 strip_tgs 检查 html,它将错误地确定它包含 html,而实际上它不包含。我并不是说这个答案是确定字符串是否包含 html 的最佳方法,但绝对不是矫枉过正。【参考方案2】:
我使用以下方法,而不是使用正则表达式(就像这里的其他建议一样):
function isHtml($string)
if ( $string != strip_tags($string) )
return true; // Contains HTML
return false; // Does not contain HTML
在这里,我使用 PHP 函数 strip_tags 从字符串中删除任何 HTML。然后它比较字符串,如果它们不匹配,则存在 HTML 标记。
【讨论】:
strlen
在那里没有必要。
好点@Red。我已经从代码中删除了strlen
,尽管它可以节省另一个进程。感谢您的建设性反馈。
函数从不返回false
@paulo62 我检查该方法是否返回true
。如果需要,可以很容易地放置一个 else。我已经更新了它...
strip_tags
在大多数情况下过于激进。字符串 the value is <4
将在您的情况下返回 true。【参考方案3】:
接受的答案会将包含
我使用以下方法,这可能是一个更好的主意,也可能不是一个更好的主意。 (欢迎评论。)
function isHTML( $str ) return preg_match( "/\/[a-z]*>/i", $str ) != 0;
这会查找任何包含 /> 且斜线和右括号之间有零个或多个字母的字符串。
以上函数返回:
<something> is NOT HTML
<b>foo</b> is HTML
<B>foo</B> is HTML
<b>foo<b> is NOT HTML
<input /> is HTML
【讨论】:
我可能会在那里使用+
,因为</>
不是HTML。否则,非常酷的概念!
@gooli - 带有 +
,它不会匹配 <input />
我看到这个正则表达式的主要问题是它不会匹配简单的,这可能是html评论中的唯一标签。【参考方案4】:
可能最简单的方法是:
<?php
function hasTags( $str )
return !(strcmp( $str, strip_tags($str ) ) == 0);
$str1 = '<p>something with <a href="/some/url">html</a> in.';
$str2 = 'a string.';
var_dump( hasTags( $str1 ) ); // true - has tags.
var_dump( hasTags( $str2 ) ); // false - no tags.
【讨论】:
这会导致错误标志。以字符串I <3 PHP
为例。此函数将确定标签确实存在,而实际上它们不存在。
嗯,但是 utf-8 文本会出现 scrcmp 错误,就像许多字符串函数一样?【参考方案5】:
这就是我的想法
function isHtml($string)
preg_match("/<\/?\w+((\s+\w+(\s*=\s*(?:\".*?\"|'.*?'|[^'\">\s]+))?)+\s*|\s*)\/?>/",$string, $matches);
if(count($matches)==0)
return FALSE;
else
return TRUE;
您只需传递一个字符串并检查它是否返回真或假。就这么简单。
【讨论】:
【参考方案6】:这取决于您定义的 html 内容。
最直接的方法是测试字符串是否包含可以用正则表达式完成的html标签
<html.*>
在 php 中测试将是
if (preg_match('/<html.*>/', $subject))
# Successful match
else
# Match attempt failed
如果您想查看是否有有效的 html,最好使用 html 解析器。
【讨论】:
我的意思是,如果我有任何包含字符 、= 和任何类型的引号的 HTML 标记! 嗯,上面的答案会测试html标签是否存在以上是关于如何检查字符串内容中是不是包含任何 HTML?的主要内容,如果未能解决你的问题,请参考以下文章
使用 Java Regex,如何检查字符串是不是包含集合中的任何单词?