<br/>正则表达式内的标签

时间:2014-10-28 17:58:58

标签: php regex

我有一个正则表达式

$rExp = '/^[0-9a-zA-Z\s"]{1,22}$/';

并检查

if(preg_match($rExp, $userString)) {echo 'OK';}

我的问题是$ userString可以是这样的:

$userString = 'Hello<br>hello';

我可以像这样修改正则表达式:

$rExp = '/^[0-9a-zA-Z\s<>"]{1,22}$/';

但我不喜欢它,因为它也接受脚本和其他标签

如何更改正则表达式,使其只接受br标记?

谢谢

2 个答案:

答案 0 :(得分:2)

您可以使用行开头的前瞻来验证后面的字符或单词是否符合您的条件,然后通过长度验证立即跟进:

^(?=(?:[0-9a-zA-Z\s"]|<br>)+$).{1,22}$

您可以将所需的任何单个字符添加到[...]字符组中,并且可以根据需要使用|<something>将其扩展为其他项目。

Demo

答案 1 :(得分:0)

我假设这是用于某种输入验证。

@onlineCop提出的答案将有效,但我认为它会弄乱&#34;长度&#34;字符串,因为<br>标记将计为4个字符。

会起作用吗?是的,当然。这是预期的结果吗?我不确定。

如果那对你有用,那就太棒了!我认为这将是最快的方法,但是非常开销很小,你可以这样做:

$maxLength = 22;

// As proposed by @onlineCop but without char count
$regEx = '^(?=(?:[0-9a-zA-Z\s"]|<br>)+$).+$'

/*
 * First: Does it has the valid length?
 * Second: Does it has only valid characters/tags?
 */
if (count(strip_tags($userString)) <= $maxLength) &&
  preg_match($regEx, $userString)) { 
    echo 'OK';
}