[RETO] Reemplazo de Funcion IsNumeric

Iniciado por 79137913, 10 Agosto 2011, 16:37 PM

0 Miembros y 3 Visitantes están viendo este tema.

79137913

#10
HOLA!!!

Antes de hacer la competencia les muestro donde sus funciones no funcionan igual que IsNumeric... Por favor corrijan y luego testeamos:

REVISEN EL SIGUIENTE POST

GRACIAS POR LEER!!!
"Como no se puede igualar a Dios, ya he decidido que hacer, ¡SUPERARLO!"
"La peor de las ignorancias es no saber corregirlas"

79137913                          *Shadow Scouts Team*

BlackZeroX

#11
.

usa la ultima funcion que postee (1.1 la que esta en geshi) la 1ra no sirve del todo bien.

Código (vb) [Seleccionar]


Private Sub Form_Load()
    MsgBox isNumeric_Black("12,23,34")
    MsgBox IsNumeric("12,23,34")
End Sub



OutPut

Código (Vb) [Seleccionar]


Verdadero     Verdadero



Deberias usar tambien Strins con con Spacios en Blanco.

Temibles Lunas!¡.
The Dark Shadow is my passion.

Sanlegas

#12
Actualización

Código (vb) [Seleccionar]
Public Function Is_NumberT(ByRef Str As String) As Boolean
On Error GoTo err
       Str = Str + 0
       Is_NumberT = True
       Exit Function
err:
End Function

raul338

#13
Código (vb) [Seleccionar]

Private Function IsNumeric_r338v2(ByVal str As String) As Boolean
    Dim cReg As Object
    Set cReg = CreateObject("VBScript.RegExp")
    str = Trim$(str)
    With cReg
        ' Testeamos con . como separador de miles y , como separador de decimales
        ' Personalmente seria para mi "^-?(?:\d{1,3}(?:\.\d{3})*|\d+)(?:\,\d+)?$"
        ' ya que 133.23.330 no es un numero aunque IsNumeric diga que si ¬¬
        .Pattern = "^[+\-]?(?:\d{1,3}(?:\.\d{1,3})*|\d*)\,?\d*?$"
        .Global = True
        .IgnoreCase = True
    End With
    IsNumeric_r338v2 = cReg.Test(str)
    If Not IsNumeric_r338v2 Then
        While InStr(str, "..")
            str = Replace$(str, "..", vbNullString)
        Wend
        ' Testeamos con , como separador de miles y . como separador de decimales
        cReg.Pattern = "^[+\-]?(?:\d{1,3}(?:\,\d{3})*|\d+)\.?\d*$"
        IsNumeric_r338v2 = cReg.Test(str)
    End If
    Set cReg = Nothing
End Function


Obviamente ya no es la mas rápida, lo arregle para los caprichos de IsNumeric (desde cuando 1..2..3 es un numero?!!!)


sTest                  IsNumeric_r338   IsNumeric  CDbl(sTest)
1..3                   Verdadero        Verdadero       13
+33.2                  Verdadero        Verdadero       332
11111111111111111111   Verdadero        Verdadero       1,11111111111111E+19
12,12                  Verdadero        Verdadero       12,12
12.12                  Verdadero        Verdadero       1212
133.23.330             Verdadero        Verdadero       13323330
36.658,30              Verdadero        Verdadero       36658,3
81,838.59              Verdadero        Verdadero       81,83859
-65,1                  Verdadero        Verdadero       -65,1
12,23,34               Falso            Falso      
asdf                   Falso            Falso      
a12f                   Falso            Falso      
1..1                   Verdadero        Verdadero       11
1,,1                   Falso            Falso      
1..2..3                Verdadero        Verdadero       123

Sanlegas

Observaciones

'LeandroA falla en "1. .2..3 "
'r338v2 falla en "1..2..3 "
'TGa falla en "1..2..3 "
'Alx falla en "1..2..3 "
'Black falla en "1. .2..3"


Salu2

raul338


Sanlegas

Cita de: raul338 en 13 Agosto 2011, 17:31 PM
Tenient101: Fixed :D

Dim A As String
A = "1..2..3 "
MsgBox IsNumeric(A)  ' = Verdadero
MsgBox IsNumeric_r338v2(A) ' = Falso

raul338

CitarÚltima modificación: Hoy a las 12:54 por raul338 »
Incluiste la modificacion?

jaunx

buenas, felicitaros a todos por los códigos,
no pongo mi code para no quedar último  :xD,
pero creo que para las pruebas tambien tendríais que usar cadenas como "&HFAA" ó "3e-3".... ;D

mi apuesta es por la de 79137913  ;-) ;-) ;-)

Sanlegas

Cita de: raul338 en 13 Agosto 2011, 17:55 PM
Incluiste la modificacion?

Sí, tiene un espacio hasta lo ultimo, IsNumeric lo toma como numero y tu función no.