2016-10-27 2 views
2

나는 7-10 자리까지 허용하는 preg_match을 만들고 있습니다. 또한preg 숫자 및 알파벳 일치

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

공간 하이픈 20 개 알파벳의 최대 허용 다른 preg_match 번호.

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

두 가지 모두 작동하지 않습니다.

+0

'/ i'가있는' –

+0

'a-zA-Z'는 중복해서 쓰지 않습니다. '/ 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!"; 
} 
는 패턴이 다른 소모 서브 패턴 (그래서, 필요 정량화 된 서브 패턴에 대한 역 추적 불가능하게하는)에 이어되지 않기 때문에 {0,20}과 그 소유 {0,20}+ 버전은 여기에서 동일하게 작동 할 것이라는 PHP demo

참고를 참조하십시오.

또한 '/^[A-Z -]{0,20}$/i'은 성을 나타내는 매우 일반적인 하위 패턴이므로 더 정확하게 지정할 수도 있습니다. 예를 들어 모든 공백 또는 ---------과 같이 문자열을 허용하지 않으려면 '/^(?=.{0,20}$)[A-Z]+(?:[ -][A-Z]+)*$/i'을 사용할 수 있습니다.

관련 문제