2012-11-14 2 views
0

이 것은 정말로 나를 혼란스럽게합니다. 내 무지를 용서합니다.`preg_match` PHP의 전체 문자열

나는 숫자가 자유롭기를 원할 정도로 여기에 $name을 가지고 있는데, 나는 그 안에 어떤 숫자도 포함되기를 원하지 않는다. 내 preg_match()은 이것이다 :

var_dump(preg_match('/[^\d]/',$name)); 

테스트 케이스 :

$name = "213131"; // int(0) 
$name = "asdda"; // int(1) 
$name = "as232dda"; // int(1) 

내가 원하는 것은 너무 int(0)을 될 수있는 세 번째 경우를 것입니다.

이 패턴을 이해하면 preg_match()입니다. 패턴이 주제와 일치하면 1을 반환한다고합니다. 여기에서는 제 경우에, 무효화 된 클래스를 사용합니다.

+1

정규식을 사용하기 전에, 당신은 정말 오래된 기초를 배울 필요가있다. 시작하기 좋은 곳은 [regular-expressions.info] (http://www.regular-expressions.info/)입니다. Regexes는 짐을 싣는 무기와 같습니다. 어떻게 작동하는지 이해하지 못한다면, 발에서 자신을 쏘거나 더 나빠질 것입니다. 그 (것)들을 배우는 시간은 그 자체로 여러 번 지불 할 것입니다. – ridgerunner

답변

4

# 3 문자와 숫자가 모두 있기 때문에 일치합니다. 영어로 정규식은 기본적으로

당신이 숫자가 아닌 문자와 일치 할 경우, 당신은에 대한 정규식 일치가 있어야

는 숫자가 아닌 문자가 있는지 일치

말한다 전체 문자열을 허용하고 임의의 문자 수 허용 :

^[^\d]+$ 
+0

첫 번째 캐럿은 문자 클래스보다 무엇을 의미합니까? – fishcracker

+0

@fishcracker는 문자열의 시작 부분과 일치합니다. 설명에 대한 내 대답을 참조하십시오. – dan1111

+0

@fishcracker :'[^ \ d]'='[\ D]'. –

1

정규식은 적어도 하나의 숫자가 아닌지 확인합니다. 대신, 당신은 이 아닌 숫자인지 확인해야합니다

var_dump(preg_match('/^\D+$/',$name)); 

(^$ 문자열의 시작과 끝입니다 \D 아무것도를하지 않은 숫자를 의미 - \d의 반대를 그래서.. 이것은 처음부터 끝까지의 자릿수와 만 일치하며, 빈 문자열과 일치하지 않습니다. 빈 문자열과도 일치 시키려면 으로 +을 바꿉니다.

0

이 시도 :

<?php 
    $string = "as232dda"; 
    $new_string = trim(str_replace(range(0,9),'',$string)); 
    echo $new_string;// gives 'asdda' 
?> 

또는 기능 형태 :

<?php 
    function remove_numbers($string){ 
    return(trim(str_replace(range(0,9),'',$string))); 
    } 

    $string = "as232dda"; 
    echo remove_numbers($string); // gives 'asdda' 
?>