我如何翻转正则表达式?

时间:2016-04-20 08:16:35

标签: php regex pcre

我正在使用以下正则表达式检查任何其他允许字符的输入...(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标签之外的其他内容。

有人可以帮我把正则表达式放在一起吗?

1 个答案:

答案 0 :(得分:0)

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

要保持br代码不变,请使用一对未转义的括号(grouping construct (...))进行匹配和捕获,并使用backreference $1进行恢复:

$regex_char_appearance = '~(<br\s*/?>)|[^A-Za-z0-9.,'-]~';
$post_char_appearance = preg_replace($regex_char_appearance, '$1' , $post_char_appearance);

请参阅regex demo

请注意,[A-z]不仅匹配所有ASCII字母,请参阅Why is this regex allowing a caret?

中的详细信息