Как мне указать регулярному выражению совпадение хотя бы с числом буквенно-цифровых символов? - PullRequest
3 голосов
/ 13 марта 2010

У меня есть форма, где пользователь отправляет поле. Поле может содержать буквы, цифры и знаки препинания. Но я хочу убедиться, что по крайней мере 3 символа являются буквами. Как я могу проверить это?

Например,

$string = "ab'c";

А мне нужно что-то вроде

if (preg_match("/[a-z]{3}/i", $string))
    print "true";
else
    print "false";

Эта строка состоит из трех букв, хотя и имеет апостроф. Это должно проверить правду. Но по какой-то причине это прямо сейчас проверяет ложь.

Любая помощь?

Ответы [ 4 ]

3 голосов
/ 13 марта 2010

Как насчет совпадения без учета регистра:

([a-z][^a-z]*){3}

Ищет 3 группы букв и любое количество не букв.

1 голос
/ 13 марта 2010

Вы не можете написать регулярное выражение, которое проверяет наличие «хотя бы x символов класса». Конечно, вы можете

preg_match_all('~([a-z][^a-z]*){3}~', "ab'c")

В более сложных случаях вы можете заменить класс чем-то другим, а затем сравнить результаты (или просто использовать четвертый параметр preg_replace):

preg_replace('~[a-z]~', '', "ab'c", -1, $count);
print_r($count); // prints "3"
1 голос
/ 13 марта 2010

Попробуйте это регулярное выражение:

^([0-9,]*[A-Za-z]){3}[A-Za-z0-9,]*$

Вы также можете удалить все небуквенные символы и проверить длину:

if (strlen(preg_replace('/[^A-Za-z]+/', '', $str)) >= 3) {
    // $str contains at least three letters
}
0 голосов
/ 13 марта 2010

Попробуйте это: $ соответствует концу строки;)

if (preg_match("/[a-zA-Z\']{3}$/i", $string))
    print "true";
else
    print "false"; 

Edit: Извините, я неправильно понял ваш вопрос. Попробуйте это:
^([a-zA-Z\']{3,}(.?))$

Результаты:
hell'o <- верно <br> h31l0 <- ложь <br> hello <- верно </p>

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...