разрешить круглые скобки и другие символы в регулярном выражении

Я сделал это регулярное выражение:

^[a-zA-Z0-9_.-]*$ 

Поддержка:

 letters [uppercase and lowercase] numbers [from 0 to 9] underscores [_] dots [.] hyphens [-] 

Теперь я хочу добавить их:

 spaces [ ] comma [,] exclamation mark [!] parenthesis [()] plus [+] equal [=] apostrophe ['] double quotation mark ["] at [@] dollar [$] percent [%] asterisk [*] 

Например, этот код принимает только некоторые из приведенных выше символов:

 ^[a-zA-Z0-9 _.,-!()+=“”„@"$#%*]*$ 

Возвращает:

Предупреждение: preg_match (): Ошибка компиляции: диапазон не соответствует порядку в классе символов со смещением 16

Solutions Collecting From Web of "разрешить круглые скобки и другие символы в регулярном выражении"

Обязательно поставьте дефис - либо в начале, либо в конце в символьном классе, иначе он должен быть экранирован. Попробуйте это регулярное выражение:

 ^[a-zA-Z0-9 _.,!()+=`,"@$#%*-]*$ 

Также обратите внимание, что поскольку * он будет даже соответствовать пустой строке. Если вы не хотите сопоставлять пустые строки, используйте + :

 ^[a-zA-Z0-9 _.,!()+=`,"@$#%*-]+$ 

Или лучше:

 ^[\w .,!()+=`,"@$#%*-]+$ 

КОНТРОЛЬНАЯ РАБОТА:

 $text = "_.,!()+=,@$#%*-"; if(!preg_match('/\A[\w .,!()+=`,"@$#%*-]+\z/', $text)) { echo "error."; } else { echo "OK."; } 

Печать:

 OK. 

Дефис рассматривается как маркер диапазона – когда он видит ,-! он думает, что вы просите диапазон всех символов в кодировке, которая находится между ними , и ! (то есть так же, как работает AZ . Это не то, что вы хотите.

Либо убедитесь, что дефис является последним символом в классе символов, как это было раньше, или избегайте его обратным слэшем.

Я также хотел бы указать, что символы кавычек, которые вы используете “”„ являются частью расширенной кодировки и не совпадают с основными котировками ASCII "' . Возможно, вы захотите включить оба набора в свой шаблон. необходимо включить символы не ASCII в шаблон, вы также должны добавить модификатор u после окончания вашего шаблона, чтобы он правильно собирал символы юникода.

Попробуйте ускользнуть от вашего регулярного выражения: [a-zA-Z0-9\-\(\)\*]

Проверьте, помогает ли это вам: Как избежать специальных символов регулярного выражения с помощью javascript?

Внутри символьного класса [...] дефис - имеет особое значение, если оно не является первым или последним символом, поэтому вам нужно избегать его:

 ^[a-zA-Z0-9 _.,\-!()+=“”„@"$#%*]*$ 

Ни один из других символов не должен быть экранирован в классе символов (кроме ] ). Вам также нужно будет избежать цитаты с указанием строки. например

 '/[\']/' "/[\"]/" 

попробуй это

^ [A-Z0-9] [A-Z0-9 * & _ ^% $ # @ ~, = +, / \ |} {) (~ `!.] [;: \ ' "" -] {0,8} $

используйте эту ссылку для проверки

трюк – это обратное упорядочение скобок и других фигурных скобок, которые позаботились о некоторых проблемах. А для квадратных скобок вы должны избегать их