FUNCTION valid_num, string, value, INTEGER=integer On_error,2 compile_opt idl2 ; A derivation of the regular expressions below can be found on ; http://wiki.tcl.tk/989 if keyword_set(INTEGER) then $ st = '^[-+]?[0-9][0-9]*$' else $ ;Integer st = '^[-+]?([0-9]+\.?[0-9]*|\.[0-9]+)([eEdD][-+]?[0-9]+)?$' ;F.P. ;Simple return if we just need a boolean test. if N_params() EQ 1 then return, stregex(strtrim(string,2),st,/boolean) vv = stregex(strtrim(string,2),st,/boolean) if size(string,/N_dimen) EQ 0 then begin ;Scalar if vv then $ value= keyword_set(integer) ? long(string) : double(string) endif else begin ;Array g = where(vv,Ng) if Ng GT 0 then begin ;Need to create output vector if keyword_set(integer) then begin value = vv*0L value[g] = long(string[g]) endif else begin value = replicate(!VALUES.D_NAN,N_elements(vv)) value[g] = double(string[g]) endelse endif endelse return,vv end