2016-06-28 2 views
1

그래서 어제 내가 볼 수있는 질문을 (Removing (nearly) all non-numeric characters from a string)반환 오류 및 특정 문자가 입력 경고

대답은 예외 였고 훌륭했습니다. 그러나 나는 그것에 대해 생각해 왔으며 단순히 유효하지 않은 문자를 제거하는 것은 올바른 일이 아닙니다. 나는 입력 된 나머지 문자가 실제로 정확하다고 가정 할 수 없다. 오류를 발생시키는 것이 가장 좋을 것이다.

내가 문자의 내 $ sAllowedValues ​​변수에 언급되지 않은 경우 오류를 제기 가겠어요 궁금 해요

입력

감사 모든 도움을 수 있습니다!

$sAllowedValues = "/\+?[0-9 EeXxTt]*/"; 
    preg_match_all($sAllowedValues, $sNumber, $sMatches); 
    var_dump($sMatches); 
+0

정확히 어떤 문제가 있습니까? 원본 입력과 일치하는 내용을 비교하여 변경된 내용이 있는지 확인할 수 있습니다. 입력에 불법 문자가있는 경우. – jeroen

답변

1

그냥 문자열 경기의 시작과 끝 추가 허용되는 문자를 확인하는 코드의 조각 : ^$을. 이렇게하면 전체 문자열이 유효한 문자로 구성되어있는 경우에만 일치가 수행됩니다.

$sNumber = 'a24432'; 

$sAllowedValues = "/^\+?[0-9 EeXxTt]*$/"; 
$res = preg_match($sAllowedValues, $sNumber, $sMatches); 
var_dump($res); // 1 - OK, 0 - there are invalid chars 
+0

위대한 작품! 나는 정규 표현식이 어떻게 작동하는지 전혀 모른다. 결코 그들 주위에 내 머리를 갖지 못했습니다! 고맙습니다! –

+0

잠시 동안 [regex101] (https://regex101.com/)에서 간단한 regexp-s를 실행하고 결과가 어떻게 변경되는지 확인하십시오. –

+0

작은 요청이 하나 더 있습니다. 어떻게하면 ' + '통해,하지만 경우에만 첫 번째 위치에 있었습니까? 다시 사람들은 0으로 입력을 시작할 수 있으므로 선택 사항입니다. 이 작업을 수행 할 수 있습니까? 아니면 복잡합니까? –