This answer relies on the fact that the digits 0-9 fall sequentially on the ASCII chart between slots 48 and 57, inclusive. The slot just prior to 0 contains / and the slot following 9 contains :.

We make use of TeX syntax that a grave accent (backtick) prior to a symbol produces the slot number (ASCII value) for the symbol. So I set up two \ifnum tests...the first looks to see if the slot of the current symbol is beyond the slot of /, and the second test checks if the slot of the current symbol is prior to the slot of :.
If both these conditions are true, the slot of the symbol falls in the range of the integer slots. Otherwise, it falls outside that range.
\documentclass{article}
\def\xloop#1{%
\ifx\relax#1
\else
%
\ifnum`#1>`/
\ifnum`#1<`:
\def\next{#1 is first integer\\}%
\else
\def\next{#1 is not an integer\\\expandafter\xloop}
\fi
\else
\def\next{#1 is not an integer\\\expandafter\xloop}
\fi
\next%
\fi}
\def\test#1{\xloop#1\relax}
\begin{document}
\test{abc3de5f}
\end{document}

Skillmon suggests a faster alternative which, as he notes, is equally robust. In this case the comparison 1<1\noexpand#1 will prove false, unless #1 is a numerical digit.
\documentclass{article}
\def\xloop#1{%
\ifx\relax#1
\else
%
\ifnum1<1\noexpand#1
\def\next{#1 is first integer\\}%
\else
\def\next{#1 is not an integer\\\expandafter\xloop}
\fi
\next%
\fi}
\def\test#1{\xloop#1\relax}
\begin{document}
\test{abc3de5f}
\end{document}