2016-10-27 4 views
2

Я делаю preg_match, что позволяет 7-10 цифр.preg match для цифр и алфавитов

preg_match('/[0-9]{7,10}/', $studentID 

Также еще один preg_match код, который позволяет максимум 20 алфавитов с пространством и дефисом.

preg_match ('/^[a-zA-Z -]{,20}+$/i', $familyname 

Оба эти аппарата не работают.

+0

ни одно из ваших утверждений не закрыто с помощью '/') '' –

+0

'a-zA-Z' с'/i' является избыточным. '/ i' делает регистр снова нечувствительным к регистру, поэтому бессмысленно предлагать версии с верхним и нижним регистрами. и '{, 20} +' также не имеет большого смысла. –

ответ

1

Вам нужно добавить анкеры для первого регулярного выражения так же, как вы использовали их со вторым рисунком, и вы должны определить нижнюю границу предельного квантора, во втором образце (скажем, от 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'.