使用php 5.4验证问题,preg匹配bbcode中的所有内容

时间:2013-12-22 09:43:53

标签: php regex validation preg-match-all bbcode

我正在编写一些PHP代码以验证bbcode,我没有错误,但bbcode不会验证我的输入...为什么?遗失了什么?

//============================================================//
// Check if all BBCode are validated before posting something //
//============================================================//
/* Tag Color */
$openColorTagCounter  = preg_match_all('#\[color=([a-zA-Z]+|\#[a-fA-F0-9]{3}[a-fA-F0-9]{0,3})\]#i', $body);
$closeColorTagCounter = preg_match_all('#\[/color\]#i', $body);
if ($openColorTagCounter > $closeColorTagCounter) {
  $error = "Tag color opened and not closed!";
  include("form.php");
  exit();
} elseif ($openColorTagCounter < $closeColorTagCounter) {
  $error = "Tag color closed and not opened!";
  include("form.php");
  exit();
}
/* Tag Bold */
$openBoldTagCounter  = preg_match_all('#\[bold\]#i', $body);
$closeBoldTagCounter = preg_match_all('#\[/bold\]#i', $body);
if ($openBoldTagCounter > $closeBoldTagCounter) {
  $error = "Tag bold opened and not closed!";
  include("form.php");
  exit();
} elseif ($openBoldTagCounter < $closeBoldTagCounter) {
  $error = "Tag bold closed and not opened!";
  include("form.php");
  exit();
}
/* Tag Italic */
$openItalicTagCounter  = preg_match_all('#\[italic\]#i', $body);
$closeItalicTagCounter = preg_match_all('#\[/italic\]#i', $body);
if ($openItalicTagCounter > $closeItalicTagCounter) {
  $error = "Tag italic opened and not closed!";
  include("form.php");
  exit();
} elseif ($openItalicTagCounter < $closeItalicTagCounter) {
  $error = "Tag italic closed and not opened!";
  include("form.php");
  exit();
}
/* Tag Underline */
$openUnderlineTagCounter  = preg_match_all('#\[underline\]#i', $body);
$closeUnderlineTagCounter = preg_match_all('#\[/underline\]#i', $body);
if ($openUnderlineTagCounter > $closeUnderlineTagCounter) {
  $error = "Tag underline opened and not closed!";
  include("form.php");
  exit();
} elseif ($openUnderlineTagCounter < $closeUnderlineTagCounter) {
  $error = "Tag underline closed and not opened!";
  include("form.php");
  exit();
}
/* Tag Code */
$openCodeTagCounter  = preg_match_all('#\[code\]#i', $body);
$closeCodeTagCounter = preg_match_all('#\[/code\]#i', $body);
if ($openCodeTagCounter > $closeCodeTagCounter) {
  $error = "Tag code opened and not closed!";
  include("form.php");
  exit();
} elseif ($openCodeTagCounter < $closeCodeTagCounter) {
  $error = "Tag code closed and not opened!";
  include("form.php");
  exit();
}
/* Tag Line Numbers */
$openNumberTagCounter  = preg_match_all('#\[number\]#i', $body);
$closeNumberTagCounter = preg_match_all('#\[/number\]#i', $body);
if ($openNumberTagCounter > $closeNumberTagCounter) {
  $error = "Tag number opened and not closed!";
  include("form.php");
  exit();
} elseif ($openNumberTagCounter < $closeNumberTagCounter) {
  $error = "Tag number closed and not opened!";
  include("form.php");
  exit();
}
/* Tag Resized Image */
$openResizedImageTagCounter  = preg_match_all('#\[img=([0-9]*)x([0-9]*)\]\[align=([A-Za-z]*)\]\[hspace=([0-9]*)\]\[vspace=([0-9]*)\](.+?)#i', $body);
$closeResizedImageTagCounter = preg_match_all('#\[/img\]#i', $body);
if ($openResizedImageTagCounter > $closeResizedImageTagCounter) {
  $error = "Tag img resized opened and not closed!";
  include("form.php");
  exit();
} elseif ($openResizedImageTagCounter < $closeResizedImageTagCounter) {
  $error = "Tag img resized closed and not opened!";
  include("form.php");
  exit();
}
/* Tag Linked Image */
$openLinkedImageTagCounter  = preg_match_all('#\[url=(.+?)\]\[img=([0-9]*)x([0-9]*)\]\[align=([A-Za-z]*)\]\[hspace=([0-9]*)\]\[vspace=([0-9]*)\](.+?)#i', $body);
$closeLinkedImageTagCounter = preg_match_all('#\[/img\]\[/url\]#i', $body);
if ($openLinkedImageTagCounter > $closeLinkedImageTagCounter) {
  $error = "Tag img linked opened and not closed!";
  include("form.php");
  exit();
} elseif ($openLinkedImageTagCounter < $closeLinkedImageTagCounter) {
  $error = "Tag img linked closed and not opened!";
  include("form.php");
  exit();
}
/* Tag Normal Image */
$openImageTagCounter  = preg_match_all('#\[img\]\[align=([A-Za-z]*)\]\[hspace=([0-9]*)\]\[vspace=([0-9]*)\](.+?)#i', $body);
$closeImageTagCounter = preg_match_all('#\[/img\]#i', $body);
if ($openImageTagCounter > $closeImageTagCounter) {
  $error = "Tag img opened and not closed!";
  include("form.php");
  exit();
} elseif ($openImageTagCounter < $closeImageTagCounter) {
  $error = "Tag img closed and not opened!";
  include("form.php");
  exit();
}
/* Tag UL */
$openUlTagCounter  = preg_match_all('#\[ul\]#i', $body);
$closeUlTagCounter = preg_match_all('#\[/ul\]#i', $body);
if ($openUlTagCounter > $closeUlTagCounter) {
  $error = "Tag ul opened and not closed!";
  include("form.php");
  exit();
} elseif ($openUlTagCounter < $closeUlTagCounter) {
  $error = "Tag ul closed and not opened!";
  include("form.php");
  exit();
}
/* Tag LI */
$openLiTagCounter  = preg_match_all('#\[li\]#i', $body);
$closeLiTagCounter = preg_match_all('#\[/li\]#i', $body);
if ($openLiTagCounter > $closeLiTagCounter) {
  $error = "Tag li opened and not closed!";
  include("form.php");
  exit();
} elseif ($openLiTagCounter < $closeLiTagCounter) {
  $error = "Tag li closed and not opened!";
  include("form.php");
  exit();
}
/* Tag Video */
$openVideoTagCounter  = preg_match_all('#\[video=([0-9]*)x([0-9]*)\]\[hspace=([0-9]*)\]\[vspace=([0-9]*)\]\[player_id=([0-9]*)\](.+?)#i', $body);
$closeVideoTagCounter = preg_match_all('#\[/video\]#i', $body);
if ($openVideoTagCounter > $closeVideoTagCounter) {
  $error = "Tag video opened and not closed!";
  include("form.php");
  exit();
} elseif ($openVideoTagCounter < $closeVideoTagCounter) {
  $error = "Tag video closed and not opened!";
  include("form.php");
  exit();
}
/* Tag SilverLight */
$openSilverlightTagCounter  = preg_match_all('#\[silverlight=([0-9]*)x([0-9]*)\]\[hspace=([0-9]*)\]\[vspace=([0-9]*)\]\[player_id=([0-9]*)\](.+?)#i', $body);
$closeSilverlightTagCounter = preg_match_all('#\[/silverlight\]#i', $body);
if ($openSilverlightTagCounter > $closeSilverlightTagCounter) {
  $error = "Tag silverlight opened and not closed!";
  include("form.php");
  exit();
} elseif ($openSilverlightTagCounter < $closeSilverlightTagCounter) {
  $error = "Tag silverlight closed and not opened!";
  include("form.php");
  exit();
}
/* Tag Center */
$openCenterTagCounter  = preg_match_all('#\[center\]#i', $body);
$closeCenterTagCounter = preg_match_all('#\[/center\]#i', $body);
if ($openCenterTagCounter > $closeCenterTagCounter) {
  $error = "Tag center opend and not closed!";
  include("form.php");
  exit();
} elseif ($openCenterTagCounter < $closeCenterTagCounter) {
  $error = "Tag center closed and not opened!";
  include("form.php");
  exit();
}
/* Tag Web */
$openUrlTagCounter  = preg_match_all('#\[url=(.+?)\]#i', $body);
$closeUrlTagCounter = preg_match_all('#\[/url\]#i', $body);
if ($openUrlTagCounter > $closeUrlTagCounter) {
  $error = "Tag url opened and not closed!";
  include("form.php");
  exit();
} elseif ($openUrlTagCounter < $closeUrlTagCounter) {
  $error = "Tag url closed and not opened!";
  include("form.php");
  exit();
}

似乎是一个愚蠢的问题,但目前我看不出正确的方法!有人可以告诉我哪里错了吗?在此期间圣诞快乐!!!

1 个答案:

答案 0 :(得分:0)

谢谢,我解决了我的问题,在这里发布解决方案。非常感谢帮助我:)问题是正则表达式称重复项目,因此无法正确看到结构...现在我已经重命名了一些项目,当然工作得很好:)我希望这可以帮助处于类似情况的人。祝所有人圣诞快乐:)周末愉快:)

//============================================================//
// Check if all BBCode are validated before posting something //
//============================================================//
/* Tag Color */
$openColorTagCounter  = preg_match_all('#\[color=([a-zA-Z]+|\#[a-fA-F0-9]{3}[a-fA-F0-9]{0,3})\]#i', $body);
$closeColorTagCounter = preg_match_all('#\[/color\]#i', $body);
if ($openColorTagCounter > $closeColorTagCounter) {
  $error = "Tag color opened and not closed!";
  include("form.php");
  exit();
} elseif ($openColorTagCounter < $closeColorTagCounter) {
  $error = "Tag color closed and not opened!";
  include("form.php");
  exit();
}
/* Tag Bold */
$openBoldTagCounter  = preg_match_all('#\[bold\]#i', $body);
$closeBoldTagCounter = preg_match_all('#\[/bold\]#i', $body);
if ($openBoldTagCounter > $closeBoldTagCounter) {
  $error = "Tag bold opened and not closed!";
  include("form.php");
  exit();
} elseif ($openBoldTagCounter < $closeBoldTagCounter) {
  $error = "Tag bold closed and not opened!";
  include("form.php");
  exit();
}
/* Tag Italic */
$openItalicTagCounter  = preg_match_all('#\[italic\]#i', $body);
$closeItalicTagCounter = preg_match_all('#\[/italic\]#i', $body);
if ($openItalicTagCounter > $closeItalicTagCounter) {
  $error = "Tag italic opened and not closed!";
  include("form.php");
  exit();
} elseif ($openItalicTagCounter < $closeItalicTagCounter) {
  $error = "Tag italic closed and not opened!";
  include("form.php");
  exit();
}
/* Tag Underline */
$openUnderlineTagCounter  = preg_match_all('#\[underline\]#i', $body);
$closeUnderlineTagCounter = preg_match_all('#\[/underline\]#i', $body);
if ($openUnderlineTagCounter > $closeUnderlineTagCounter) {
  $error = "Tag underline opened and not closed!";
  include("form.php");
  exit();
} elseif ($openUnderlineTagCounter < $closeUnderlineTagCounter) {
  $error = "Tag underline closed and not opened!";
  include("form.php");
  exit();
}
/* Tag Code */
$openCodeTagCounter  = preg_match_all('#\[code\]#i', $body);
$closeCodeTagCounter = preg_match_all('#\[/code\]#i', $body);
if ($openCodeTagCounter > $closeCodeTagCounter) {
  $error = "Tag code opened and not closed!";
  include("form.php");
  exit();
} elseif ($openCodeTagCounter < $closeCodeTagCounter) {
  $error = "Tag code closed and not opened!";
  include("form.php");
  exit();
}
/* Tag Line Numbers */
$openNumberTagCounter  = preg_match_all('#\[number\]#i', $body);
$closeNumberTagCounter = preg_match_all('#\[/number\]#i', $body);
if ($openNumberTagCounter > $closeNumberTagCounter) {
  $error = "Tag number opened and not closed!";
  include("form.php");
  exit();
} elseif ($openNumberTagCounter < $closeNumberTagCounter) {
  $error = "Tag number closed and not opened!";
  include("form.php");
  exit();
}
/* Tag Resized Image */
$openResizedImageTagCounter  = preg_match_all('#\[img-resized=([0-9]*)x([0-9]*)\]\[align=([A-Za-z]*)\]\[hspace=([0-9]*)\]\[vspace=([0-9]*)\]#i', $body);
$closeResizedImageTagCounter = preg_match_all('#\[/img-resized\]#i', $body);
if ($openResizedImageTagCounter > $closeResizedImageTagCounter) {
  $error = "Tag img resized opened and not closed!";
  include("form.php");
  exit();
} elseif ($openResizedImageTagCounter < $closeResizedImageTagCounter) {
  $error = "Tag img resized closed and not opened!";
  include("form.php");
  exit();
}
/* Tag Linked Image */
$openLinkedImageTagCounter  = preg_match_all('#\[url-linked=(.+?)\]\[img-linked=([0-9]*)x([0-9]*)\]\[align=([A-Za-z]*)\]\[hspace=([0-9]*)\]\[vspace=([0-9]*)\]#i', $body);
$closeLinkedImageTagCounter = preg_match_all('#\[/img-linked\]\[/url-linked\]#i', $body);
if ($openLinkedImageTagCounter > $closeLinkedImageTagCounter) {
  $error = "Tag img linked opened and not closed!";
  include("form.php");
  exit();
} elseif ($openLinkedImageTagCounter < $closeLinkedImageTagCounter) {
  $error = "Tag img linked closed and not opened!";
  include("form.php");
  exit();
}
/* Tag Normal Image */
$openImageTagCounter  = preg_match_all('#\[img\]\[align=([A-Za-z]*)\]\[hspace=([0-9]*)\]\[vspace=([0-9]*)\]#i', $body);
$closeImageTagCounter = preg_match_all('#\[/img\]#i', $body);
if ($openImageTagCounter > $closeImageTagCounter) {
  $error = "Tag img opened and not closed!";
  include("form.php");
  exit();
} elseif ($openImageTagCounter < $closeImageTagCounter) {
  $error = "Tag img closed and not opened!";
  include("form.php");
  exit();
}
/* Tag UL */
$openUlTagCounter  = preg_match_all('#\[ul\]#i', $body);
$closeUlTagCounter = preg_match_all('#\[/ul\]#i', $body);
if ($openUlTagCounter > $closeUlTagCounter) {
  $error = "Tag ul opened and not closed!";
  include("form.php");
  exit();
} elseif ($openUlTagCounter < $closeUlTagCounter) {
  $error = "Tag ul closed and not opened!";
  include("form.php");
  exit();
}
/* Tag LI */
$openLiTagCounter  = preg_match_all('#\[li\]#i', $body);
$closeLiTagCounter = preg_match_all('#\[/li\]#i', $body);
if ($openLiTagCounter > $closeLiTagCounter) {
  $error = "Tag li opened and not closed!";
  include("form.php");
  exit();
} elseif ($openLiTagCounter < $closeLiTagCounter) {
  $error = "Tag li closed and not opened!";
  include("form.php");
  exit();
}
/* Tag Video */
$openVideoTagCounter  = preg_match_all('#\[video=([0-9]*)x([0-9]*)\]\[hspace=([0-9]*)\]\[vspace=([0-9]*)\]\[player_id=([0-9]*)\]#i', $body);
$closeVideoTagCounter = preg_match_all('#\[/video\]#i', $body);
if ($openVideoTagCounter > $closeVideoTagCounter) {
  $error = "Tag video opened and not closed!";
  include("form.php");
  exit();
} elseif ($openVideoTagCounter < $closeVideoTagCounter) {
  $error = "Tag video closed and not opened!";
  include("form.php");
  exit();
}
/* Tag SilverLight */
$openSilverlightTagCounter  = preg_match_all('#\[silverlight=([0-9]*)x([0-9]*)\]\[hspace=([0-9]*)\]\[vspace=([0-9]*)\]\[player_id=([0-9]*)\]#i', $body);
$closeSilverlightTagCounter = preg_match_all('#\[/silverlight\]#i', $body);
if ($openSilverlightTagCounter > $closeSilverlightTagCounter) {
  $error = "Tag silverlight opened and not closed!";
  include("form.php");
  exit();
} elseif ($openSilverlightTagCounter < $closeSilverlightTagCounter) {
  $error = "Tag silverlight closed and not opened!";
  include("form.php");
  exit();
}
/* Tag Center */
$openCenterTagCounter  = preg_match_all('#\[center\]#i', $body);
$closeCenterTagCounter = preg_match_all('#\[/center\]#i', $body);
if ($openCenterTagCounter > $closeCenterTagCounter) {
  $error = "Tag center opend and not closed!";
  include("form.php");
  exit();
} elseif ($openCenterTagCounter < $closeCenterTagCounter) {
  $error = "Tag center closed and not opened!";
  include("form.php");
  exit();
}
/* Tag Web */
$openUrlTagCounter  = preg_match_all('#\[url=(.+?)\]#i', $body);
$closeUrlTagCounter = preg_match_all('#\[/url\]#i', $body);
if ($openUrlTagCounter > $closeUrlTagCounter) {
  $error = "Tag url opened and not closed!";
  include("form.php");
  exit();
} elseif ($openUrlTagCounter < $closeUrlTagCounter) {
  $error = "Tag url closed and not opened!";
  include("form.php");
  exit();
}