PHP регулярное выражение разрешить только английские символы в строке - PullRequest
1 голос
/ 10 июня 2011

Я хочу вставить в текстовое поле только английские символы и другие специальные символы, такие как

$!@{]{[

и т.д ...

но я также хочу проверить, содержит ли строка хотя бы 2 символа из них: (a-zA-Z0-9)

Итак, я подумал об этом:

preg_match('/[^a-zA-Z0-9 -"?()[]#:/\'_+*%@!~`$><,.;{}|\]/',$string)

это хороший подход?

Ответы [ 3 ]

3 голосов
/ 10 июня 2011

Нет, ваш подход не очень хорош

Попробуйте этот.Вы должны заполнить специальные символы, которые вы хотите в класс символов.Вам необходимо экранировать символы ]\-^, поскольку они имеют особое значение в классе (в зависимости от их положения).

^(?=.*[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 голосов
/ 10 июня 2011
(?:.*?[0-9a-zA-Z]){2,}[0-9a-zA-Z$!@{\]{\[]*
0 голосов
/ 10 июня 2011
$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;

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

...