我需要一个正则表达式模式,检查字符串是否包含接受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
提前谢谢。
答案 0 :(得分:4)
如果您只关心ASCII字母,请检查
[^\W\d_WP]
并使搜索不区分大小写:
preg_match('/[^\W\d_WP]/i', $subject)
[^\W\d_WP]
匹配允许字符列表中字母数字,减号数字,下划线,W
和P
的字符。 [^\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'));
?>