PHP регулярное выражение разрешить только английские символы в строке
Я хочу вставить в текстовое поле только английские символы и другие специальные символы, такие как
$!@{]{[
так далее...
но также я хочу проверить, содержит ли строка хотя бы 2 символа из них: (a-zA-Z0-9)
Вот я и подумал об этом:
preg_match('/[^a-zA-Z0-9 -"?()[]#:/\'_+*%@!~`$><,.;{}|\]/',$string)
это хороший подход?
3 ответа
Нет твой подход не хорош
Попробуй это. Вам необходимо заполнить нужные символы в классе символов. Вам нужно сбежать ]\-^
символы, так как они имеют особое значение в классе (в зависимости от их положения).
^(?=.*[A-Za-z0-9].*[A-Za-z0-9])[$!@{}[\]A-Za-z0-9]*$
Смотрите это здесь на Regexr
Первая часть - это позитивный взгляд, который обеспечивает двух персонажей вашего [A-Za-z0-9]
требование где-то в строке.
Затем идет класс персонажа [A-Za-z0-9])[$!@\{\}\[\]A-Za-z0-9]
где вы можете вставить символы, которые вы хотите соответствовать.
^
в начале моего выражения гарантирует, что оно совпадает с самого начала начала и $
в конце убедитесь, что он совпадает с концом строки.
^
в начале вашего примера приведено отрицание полного класса персонажа, что вы не хотите, я думаю, если вы хотите, чтобы соответствовать для персонажа ^
положить его где-нибудь в классе. -
в середине вашего класса определяет диапазон символов, который соответствует всему от -"
Я не знаю, что это за персонажи, но, вероятно, больше, чем вы хотите. Положить -
в начале или в конце или избежать его.
$parameter ='(a-zA-Z){2}';
if $string='kasdfhk890';
preg_match($string,$parameter); //
return false;
if $string='k';
preg_match($string,$parameter); // single char error
return false;
if $string='kuyyee';
preg_match($string,$parameter);// english character only
return true;