Thanks for the good discussion. For the record, I agree with Hugo -- ISNUMERIC doesn't give you very good information because it's test is overly broad.
For example,
\- ,,.,
succeeds in ISNUMERIC() because that converts to a MONEY value of 0.
If you want to see some of the other odd things that are considered numeric by this function, try this:
declare @limit int
set @limit = 4
;with l as (
select 32 as i, char(32) as s, isnumeric(char(32)) as n
union all
select i+1, char(i+1), isnumeric(char(i+1)) from l where i < 127
),
m as (
select cast(l.s as varchar(max)) as ms, isnumeric(l.s) as mn
from l
where ISNUMERIC(l.s) = 1
union all
select ms + cast(l.s as varchar(max)), ISNUMERIC(ms + cast(l.s as varchar(max)))
from m,l
where mn = 1
and datalength(ms) < @limit
and ms not like '%[0-9]%')
select ms from m
where mn = 1 and ms not like '%[0-9]'
option (maxrecursion 0)
This will return all of the strings with length of @limit or below which pass ISNUMERIC() even though they don't contain any digits.