2010-02-13 2 views

답변

17

다음 ^는 문자열의 시작과 일치

if(!preg_match("/^[a-zA-Z'-]+$/",$First)) { die ("invalid first name");} 

에서, $는 문자 그룹 후 문자열과 +의 끝을 일치는 "하나 이상의"일치 문자를 의미합니다.

+0

감사합니다! – Bill

+0

O'Brien이 자신의 이름을 입력하려고 시도 할 때 여전히이 오류가 발생합니다. –

+0

@AuntJamaima : 그것은 OP가 자신이 허용하고 싶은 캐릭터에 대해 구체적이었던 질문의 범위에 실제로 있지 않습니다. ** 당신이 필요로하는 ** 문자를 허용하는 정규 표현식에 어려움이 있다면 새로운 질문을해야합니다. –

4

당신은 하나의 문자와 일치합니다. + (1 이상)과 같은 와일드 카드를 추가해야합니다. 또한 문자열의 아무 곳이나 일치시킵니다. 잘못된 문자가 없는지 확인하려면 앵커 (문자열의 시작 부분에 ^, 끝 부분에 $)를 추가해야합니다.

if (!preg_match("/^[a-zA-Z'-]+$/", $First)) { die ("invalid first name");} 

또는 당신은 일치하지 않는 문자도 찾아보실 수 있습니다 : 대괄호 내부의 ^ 여기에 "이 중 하나가 아닌 모든 문자"를 의미

if (preg_match("/[^a-zA-Z'-]/", $First)) { die ("invalid first name");} 

.

+0

여전히 '123abc456'에 대해 OK 플래그가 설정됩니다. * 지금 바로 편집하십시오 :-) –

3

이 경우 잘못된 문자를 찾으려면 모든 문자를 비교하고 일치시키는 것이 좋지만 잘못된 문자 하나가 나타나면 검색을 중단하고 오류를 반환 할 수 있습니다. 이것은 항상 전체 문자열을 스캔하는 것보다 효율적입니다.

if (preg_match("/[^A-Za-z'-]/", $First)) { die ("invalid first name"); } 

^내부 세트는 세트에없는 모든 것을 일치시킵니다. 무효 캐릭터가 하나라도있는 경우 문자열이 유효하지 않기 때문에 세트에 반복 연산자가 필요하지 않습니다. 당신은 예를 들어, 이름을 원하는 넣다

더 나은, 당신이 하나를 시도 할 수 있습니다

if (preg_match("/[^A-Za-z'-]/", $First, $Inv)) { die ("{$Inv[0]} not allowed in first name"); } 
+0

무례하지 않아도됩니다 만, 왜 이런 맥락에서 효율성을 언급하고 있습니까? 대형 Hadron Collider에 상응하는 프로파일 링을 사용하여이 두 가지 접근법 간의 성능 차이를 측정해야합니다. : P –

+0

@ 앨런 : 그것은 선택의 집합 중 어느 것이 더 효율적인지 알지 못하지만,이 경우에는 PHP를 선택하는 오버 헤드로 인해 차이가 없어집니다. –

1

더 도움이 오류 메시지가 될 것이다 "존 람보"

되는 HTML FORM.PHP

<div class="error"><?php echo $error['name']; ?></div> 
<input name="name" type="text" value="<?php echo $input['name']; ?>" class="inputf"> 

PHP의 연락처 페이지 악센트 부호가있는 문자를 추가

if(!preg_match("/^[a-zA-Z'-]/", $input['name'])) 
{ 
    // name is in-valid 
    $error['name'] = 'Invalid Name'; 
    include('views/form.php'); 
} 
1

너무 아마 스마트 동안 것을는 "피에르 베 지어는"양식을 작성 할 수 있습니다 . 추가 중 :

À-ÿ 

.. 정규 표현식을 사용하면됩니다. 모든 것을 포함하여 다음과 같은 내용이 포함되어 있습니다.

/^([a-zA-ZÀ-ÿ-' ]+)$/ 
+0

경고 : preg_match() : 컴파일 실패 : 오프셋 15의 문자 클래스에서 순서가 벗어남 –

0

다음은 내가 생각해 낸 해결책입니다. 아포스트로피, 하이픈 및 공백이있는 이름의 유효성 검사 문제를 처리 할 수 ​​있어야합니다.

0

오류가 발생하면이 또한 잘못된 정규 표현식처럼, 일치 if (!preg_match("/^[a-zA-Z'-]+$/", $firstName)) {를 사용하는 경우

\t if(!preg_match('/^([a-zA-Z]+[\'-]?[a-zA-Z]+[ ]?)+$/', $string))

, 수익 모두에 대한 ! 일치 FALSE0 값 때문이다. PHP Manual에서

: preg_match() returns 1 if the pattern matches given subject, 0 if it does not, or FALSE if an error occurred.

그래서 이름이 귀하의 요구 사항에 의해 유효한지 확인하는 가장 좋은 방법은 다음과 같습니다 수정 및 명확한 설명을위한

if (preg_match("/^[a-zA-Z'-]+$/", $firstName) === 1) { 
    die('Valid name'); 
} else { 
    die('Invalid name or error'); 
} 
관련 문제