我正在使用以下正则表达式检查任何其他允许字符的输入...(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标签之外的其他内容。
有人可以帮我把正则表达式放在一起吗?
答案 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?