无论字符序列如何,如何创建匹配的正则表达式?

时间:2011-08-21 12:08:30

标签: php regex

说我要求用户输入提供的某些单词,他/他只会在一个文本框中输入它,该文本框将被验证无论的顺序。我一直在寻找几个小时的答案我'卡住了:/

e.g。应该输入的词是:foo,bar,green。

即使订单 bar green foo green foo bar

,我仍然可以匹配

我非常了解正则表达式的基础知识,但我不知道如何匹配这种类型的条件。 任何答案将不胜感激!

4 个答案:

答案 0 :(得分:4)

简单回答:不要使用正则表达式。

只需explode()输入,然后手动检查单词是否正常。检查输入是否良好的简单方法是:

if(!array_diff(explode(' ', $input), $valid_words)) {
    // input OK
}

答案 1 :(得分:3)

这将检查输入中是否有这三个单词,仅此而已:

/^(?=.*\bbar\b)(?=.*\bgreen\b)(?=.*\bfoo\b)(?:\s*\b\w+\b\s*){3}$/s

答案 2 :(得分:1)

使用explode()

http://sandbox.phpcode.eu/g/59c57

<?php 
$str = 'foo, bar, green'; 
$array = explode(',', $str); 
print_r($array);

答案 3 :(得分:0)

此正则表达式将检查输入中是否包含这些单词:

(?=^.*?foo.*$)(?=^.*?bar.*$)(?=^.*?green.*$)^.*$

但是它没有检查它是否没有其他东西。一般来说,我同意别人不要使用正则表达式来做这件事。拆分输入并检查字典。