我如何翻转正则表达式?

How do i Flip a regex?

我正在使用以下正则表达式来检查输入是否存在允许的字符...(a-zA-z0-9 点、逗号、破折号和单引号以及 br 标记)

<?php

$regex_char_appearance = '/([A-Za-z0-9 \-\.\,\']|(<br>))/';

?>

我一直在尝试创建一个正则表达式来清理用户输入。我只是无法让它工作所以尝试了不同的东西,比如...

<?php

    $regex_char_appearance = '/(?!<br>)([^A-Za-z0-9 \-\.\,\'])/';

    $regex_char_appearance = '/([^A-Za-z0-9 \-\.\,\']|[^(<br>)])/';

   //remove anything other then alphabetic and allowed
    $post_char_appearance = preg_replace( $regex_char_appearance , '' , $post_char_appearance);

?>

所以目标是删除除 a-zA-z0-9、点、逗号、破折号、单引号和带 preg_replace.

输出的 br 标签以外的任何内容

谁能帮我整理一个有效的正则表达式?

您可以将不允许使用的字符与 [^A-Za-z0-9.,'-] 匹配(否定 character class 匹配 class 中定义的任何字符)。

要保持​​ br 标签完整,请用一对未转义的括号匹配并捕获它(grouping construct (...)) and restore with a backreference </code>: </p> <pre><code>$regex_char_appearance = '~(<br\s*/?>)|[^A-Za-z0-9.,'-]~'; $post_char_appearance = preg_replace($regex_char_appearance, '' , $post_char_appearance);

regex demo

请注意 [A-z] 不仅匹配所有 ASCII 字母,更多信息请参见