Я сделал это регулярное выражение:
^[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
Обязательно поставьте дефис -
либо в начале, либо в конце в символьном классе, иначе он должен быть экранирован. Попробуйте это регулярное выражение:
^[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} $
используйте эту ссылку для проверки
трюк – это обратное упорядочение скобок и других фигурных скобок, которые позаботились о некоторых проблемах. А для квадратных скобок вы должны избегать их