我希望将prism语法荧光笔集成到我自定义构建的php/mysql CMS中;然而,我有一些问题与正则表达式语法。这就是我希望完成的:
- 允许用户发布
- 单独文本,
- 或代码和文本,但绝不是单独代码。
- 代码可以在前面加文本,也可以在代码之后加文本。
我的PHP代码如下:
function bbcode2html($var)
{
// [code]
$var = preg_replace('/'[code](.+?)'['/code]/si',
'<section class="language-markup">
<pre><code>$1</code></pre>
</section>', $var);
return $var;
}
$var = '[code]<!DOCTYPE html>[/code] THis is text';
// verify content input
if(!preg_match("/(w+?)|'[code](.+?)'['/code]/si", $var))
{
echo 'The code tags can not be empty!';
}
elseif(!preg_match("/(w+?)|'[code](.+?)'['/code](w+)/si", $var))
{
echo 'Your post contains only code, please add some text';
}else{
echo $var = bbcode2html(htmlentities($var));}
在上面的代码中,这是我观察到的:
- 当单独发布文本时,我得到这个反馈'代码标签不能为空!'
- 当文本和代码发布时,我得到这个反馈'你的帖子只包含代码,请添加一些文本'
因此,我需要关于正确的正则表达式语法的线索,这将使我实现这两个目标:
- 允许用户单独发布文本,或者代码和文本,但不能单独发布代码。
- 代码可以在前面加文本,也可以在代码之后加文本。
谢谢。
做两个检查怎么样:
- 在剥离所有
[code]...[/code]
并修剪后,验证字符串包含一个[[:alnum:]]。 - 检查空代码标签
参见eval.in
示例$var = '[code]<!DOCTYPE html>[/code] THis is text';
// code alone or nothing
if(!preg_match('~[[:alnum:]]~', trim(preg_replace('~'[code'].*?'[/code']~', "", $var))))
{
echo 'Please add some text...';
} else {
// empty code tags
if(preg_match('~'[code']'s*'[/code']~', $var))
{
echo 'The code tags can not be empty!';
// fine
} else {
echo "wohoOoo it works!";
}
}