Ну, это не работает, потому что [\wP]{7}
(в вашем регулярном выражении: /^[\wP]{7}$?/
) означает найти 7 символов, которые являются либо символом слова, либо буквой P. Он может найти все P и будет соответствовать, или все словасимволы, и это будет соответствовать.Мое быстрое решение состояло бы в том, чтобы проверить, что строка состоит из 7 букв, используя регулярное выражение, а затем сделать позицию строки, чтобы найти "P"
:
if(preg_match("/^[\w]{7}$/", $target) && strpos($target, "P") != -1) {
// Do stuff
}