Вам нужно добавить анкеры для первого регулярного выражения так же, как вы использовали их со вторым рисунком, и вы должны определить нижнюю границу предельного квантора, во втором образце (скажем, от 0 до 20):
$studentID = "1234567";
if (preg_match('/^[0-9]{7,10}$/', $studentID)) {
echo "$studentID matched!\n";
}
$familyname = "Pupkin";
if (preg_match ('/^[A-Z -]{0,20}$/i', $familyname)) {
echo "$familyname matched!";
}
См PHP demo
{0,20}
Обратите внимание, что и его притяжательные {0,20}+
версия будет работать то же самое здесь, так как модель не следует с другими потребляющих подмасках (так, нет необходимости, чтобы отключить возвратов для количественного подмаски).
Кроме того, '/^[A-Z -]{0,20}$/i'
является очень общим подшаблоном для фамилий, возможно, вы захотите его уточнить. Например, чтобы запретить строки, подобные всем пробелам, или ---------
, вы можете использовать '/^(?=.{0,20}$)[A-Z]+(?:[ -][A-Z]+)*$/i'
.
ни одно из ваших утверждений не закрыто с помощью '/') '' –
'a-zA-Z' с'/i' является избыточным. '/ i' делает регистр снова нечувствительным к регистру, поэтому бессмысленно предлагать версии с верхним и нижним регистрами. и '{, 20} +' также не имеет большого смысла. –