Похоже, вы используете (?=.*\W+)
для соответствия специальным символам. Но _
- это символ слова, который находится в \w
, а \W
- это все остальное, так что это не соответствует _
. Измените его на: (?=.*[\W_]+)
Кроме того, вам не нужно +
в этом. Вам нужно только соответствовать 1, чтобы добиться успеха.