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] где вы можете вставить символы, которые вы хотите соответствовать.

^ в начале моего выражения гарантирует, что оно совпадает с самого начала начала и $ в конце убедитесь, что он совпадает с концом строки.

^ в начале вашего примера приведено отрицание полного класса персонажа, что вы не хотите, я думаю, если вы хотите, чтобы соответствовать для персонажа ^ положить его где-нибудь в классе. - в середине вашего класса определяет диапазон символов, который соответствует всему от -"Я не знаю, что это за персонажи, но, вероятно, больше, чем вы хотите. Положить - в начале или в конце или избежать его.

(?:.*?[0-9a-zA-Z]){2,}[0-9a-zA-Z$!@{\]{\[]*
$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;

Вы хотите узнать больше попробуйте эту ссылку

Другие вопросы по тегам