用于检查除W,w,P,p之外的字母的PHP正则表达式

时间:2011-09-29 07:28:24

标签: php regex

我需要一个正则表达式模式,检查字符串是否包含接受W,w,P,p的字母。

$pattern = ''; // I need this pattern
preg_match($pattern, '123123'); // false
preg_match($pattern, '123123a'); // true
preg_match($pattern, '123123W'); // false
preg_match($pattern, '123123w'); // false
preg_match($pattern, '123123P'); // false
preg_match($pattern, '123123p'); // false
preg_match($pattern, '123123WwPp'); // false
preg_match($pattern, 'abcWwPp'); // true
preg_match($pattern, 'abc'); // true

提前谢谢。

3 个答案:

答案 0 :(得分:4)

如果您只关心ASCII字母,请检查

[^\W\d_WP]

并使搜索不区分大小写:

preg_match('/[^\W\d_WP]/i', $subject)

[^\W\d_WP]匹配允许字符列表中字母数字,减号数字,下划线,WP的字符。 [^\W]看起来违反直觉,因为它意味着“不是非字母数字字符”,但双重否定得到回报,因为我可以从结果中减去其他字符。

如果您关心Unicode字母,请使用

preg_match('/[^\PLWP]/iu', $subject)

\PL匹配任何非Unicode字母的字符(与\pL相反)

答案 1 :(得分:3)

搜索w和p之外的范围 - 像这样

/[a-oq-vx-z]/i

请注意最后的i不区分大小写

答案 2 :(得分:1)

这不是一个答案,而是一个检查Tim Pietzcker表达的小程序:它根据Billy提供的测试工作。

<?php

error_reporting(E_ALL);
$pattern = '/[^\W\d_WP]/i'; 

assert(!preg_match($pattern, '123123'));
assert(preg_match($pattern, '123123a'));
assert(!preg_match($pattern, '123123W'));
assert(!preg_match($pattern, '123123w'));
assert(!preg_match($pattern, '123123P'));
assert(!preg_match($pattern, '123123p'));
assert(!preg_match($pattern, '123123WwPp'));
assert(preg_match($pattern, 'abcWwPp')); 
assert(preg_match($pattern, 'abc'));

?>