2013-03-19 8 views
0

이 코드는 알파벳 문자 또는 숫자를 모두 포함 할 수있는 문자열이며,이를 구분해야합니다. 함수 ord()을 사용하는 것이 논리가 아닐까요? 물론 그렇 겠지!제어 구조에 ord() 함수를 적용했습니다.

$r_1 = $_POST["r1"]; 

    $reag_1 = explode (" ", $r_1); 

    foreach ($reag_1 as $k => $v) { 

     if (ord($v) != (48 || 49 || 50 || 51 || 52 || 53 || 54 || 55 || 56 || 57)){ 

     // if its a digit then do some stuff 

     } else { 

     // then its something else and lets do some OTHER stuff 

     } 
    } 

이제 재미있는 것은 내가 $reag_1에 공급 어떤 true 경로 만 갈 것으로 보인다는 것이다. 나는 var_dump()-$reag_1을 두 번 점검하고 프로그램이 진행되는 곳을 추적했다. 거기에 그 배열에 알파벳 문자가 있습니다. 내 실수는 어디에서 알고리즘을 올바른 방향으로 옮기지 못하게합니까? 아주 기본적인 구문 오류가 계속 발생하는 느낌이 들었습니다.

미리 감사드립니다.

답변

1

사용 (ord($v)>=48) and (ord($v)<=57).

>=Ord("0")<=Ord("9")을 사용할 수도 있습니다.

심지어 is_numeric 기능이 있습니다.

+0

감사합니다. 나는 도와 주었지만, is_numeric을 사용할 예정이라면 을 시도했다. ((ord ($ v)> = 48) 및 (ord ($ v) – Rhiozan

+0

'chr'을'ord'로 수정 했으므로, 대문자 등을 원한다면'ord ('A')'와'ord ('Z')'는 유용 할 것입니다. – Voitcus

1

아마,이 라인은 PHP에서 논리적으로 올바르지 않습니다 :

if (ord($reag_1[$k]) != (48 || 49 || 50 || 51 || 52 || 53 || 54 || 55 || 56 || 57)) 

당신은 사용해야합니다

if(ord($reag_1[$k]) != 48 || ord($reag_1[$k]) != 49 ...) 

또는 더 좋은 방법은 사용 :

$array = array(48, 49, 50, 51, 52, 53, 54, 55, 56, 57) 
if(in_array(ord($reag_1[$k]), $array)){