вместо проверки на наличие специальных символов, проверяйте только на наличие допустимых символов
regex: /^[A-Za-z\d=#$%...-]+$/
Замените ...
всеми специальными символами, которые вы хотите разрешить. В приведенном выше примере допускаются #
, $
, %
и -
. Примечание: вам не нужно экранировать (большинство) символов внутри []
.
Если вы хотите разрешить -
, это должен быть последний символ, в противном случае регулярное выражение пытается проанализировать диапазон. (например, [a-c]
соответствует a, b и c. [a-c-]
соответствует a, b, c и -)
Кроме того, если вы хотите разрешить ^
, он не может быть первым символом, в противном случае регулярное выражение рассматривает это как своего рода оператор not
. (например, [^abc]
соответствует любому символу, который не является a, b или c)
В приведенном выше примере полное регулярное выражение может выглядеть примерно так
regex: /^[A-Za-z\s`~!@#$%^&*()+={}|;:'",.<>\/?\\-]+$/
Объяснение
NODE EXPLANATION
--------------------------------------------------------------------------------
^ the beginning of the string
--------------------------------------------------------------------------------
[A-Za- any character of: 'A' to 'Z', 'a' to 'z',
z\s`~!@#$%^&*()+={}| whitespace (\n, \r, \t, \f, and " "), '`',
;:'",.<>/?\\-]+ '~', '!', '@', '#', '$', '%', '^', '&',
'*', '(', ')', '+', '=', '{', '}', '|',
';', ':', ''', '"', ',', '.', '<', '>',
'/', '?', '\\', '-' (1 or more times
(matching the most amount possible))
--------------------------------------------------------------------------------
$ before an optional \n, and the end of the
string