Update v1.02.2
- Allow characters after number (like PB)
- Allow spaces before number (like PB)
- Rules tightened (Stricter like PB)
Code: Select all
;-TOP by mk-soft, v1.02.2, 12.11.2022
Enumeration 1
#IsInteger
#IsFloat
EndEnumeration
Procedure IsNumeric(Value.s)
Protected r1, *value.character, signed, num, float, exponent, exponent2
*value = @Value
If *value
Repeat
If *value\c = '+' Or *value\c = '-'
If signed
num = #False
Break
EndIf
signed = #True
ElseIf *value\c >= '0' And *value\c <= '9'
num = #True
Break
ElseIf *value\c <> ' '
Break
EndIf
*value + SizeOf(character)
ForEver
If num
Repeat
*value + SizeOf(character)
If *value\c = 0
Break
EndIf
If *value\c = '.'
float = 1
Break
ElseIf *value\c = 'e' Or *value\c = 'E'
exponent = 1
Break
ElseIf *value\c < '0' Or *value\c > '9'
Break
EndIf
ForEver
If float
Repeat
*value + SizeOf(character)
If *value\c >= '0' And *value\c <= '9'
float + 1
ElseIf *value\c = 'e' Or *value\c = 'E'
exponent = 1
Break
Else
Break
EndIf
ForEver
EndIf
If exponent
Repeat
*value + SizeOf(character)
If *value\c >= '0' And *value\c <= '9'
exponent + 1
ElseIf *value\c = '+' Or *value\c = '-'
If exponent >= 2
Break
ElseIf exponent2
num = #False
Break
EndIf
exponent2 = #True
Else
Break
EndIf
ForEver
EndIf
If num
If float And float < 2
r1 = 0
ElseIf exponent And exponent < 2
r1 = 0
Else
If float
r1 = #IsFloat
Else
r1 = #IsInteger
EndIf
EndIf
EndIf
EndIf
EndIf
ProcedureReturn r1
EndProcedure
; ****
CompilerIf #PB_Compiler_IsMainFile
Define t1.s
Debug "Numbers"
t1 = " 50"
Debug t1 + " = Type " + IsNumeric(t1) + " Value = " + ValF(t1)
t1 = "1000"
Debug t1 + " = Type " + IsNumeric(t1) + " Value = " + Val(t1)
t1 = "+1000 Meters"
Debug t1 + " = Type " + IsNumeric(t1) + " Value = " + Val(t1)
t1 = "-1000"
Debug t1 + " = Type " + IsNumeric(t1) + " Value = " + Val(t1)
t1 = "1.1"
Debug t1 + " = Type " + IsNumeric(t1) + " Value = " + ValF(t1)
t1 = "+100.0%"
Debug t1 + " = Type " + IsNumeric(t1) + " Value = " + ValF(t1)
t1 = "-100.0%"
Debug t1 + " = Type " + IsNumeric(t1) + " Value = " + ValF(t1)
t1 = "1E3"
Debug t1 + " = Type " + IsNumeric(t1) + " Value = " + ValF(t1)
t1 = "1.0e3+2"
Debug t1 + " = Type " + IsNumeric(t1) + " Value = " + ValF(t1)
t1 = "-0.1E+5+"
Debug t1 + " = Type " + IsNumeric(t1) + " Value = " + ValF(t1)
t1 = "-1.0e-3"
Debug t1 + " = Type " + IsNumeric(t1) + " Value = " + ValF(t1)
Debug "Invalid Numbers"
t1 = ".100"
Debug t1 + " = Type " + IsNumeric(t1) + " Value = " + ValF(t1)
t1 = "100."
Debug t1 + " = Type " + IsNumeric(t1) + " Value = " + ValF(t1)
t1 = "++100"
Debug t1 + " = Type " + IsNumeric(t1) + " Value = " + ValF(t1)
t1 = "--100"
Debug t1 + " = Type " + IsNumeric(t1) + " Value = " + ValF(t1)
t1 = "100..0"
Debug t1 + " = Type " + IsNumeric(t1) + " Value = " + ValF(t1)
t1 = "s100.0"
Debug t1 + " = Type " + IsNumeric(t1) + " Value = " + ValF(t1)
t1 = "2E"
Debug t1 + " = Type " + IsNumeric(t1) + " Value = " + ValF(t1)
t1 = "1.0ee-3"
Debug t1 + " = Type " + IsNumeric(t1) + " Value = " + ValF(t1)
t1 = "1.0e+-3"
Debug t1 + " = Type " + IsNumeric(t1) + " Value = " + ValF(t1)
t1 = ""
Debug t1 + " = Type " + IsNumeric(t1) + " Value = " + ValF(t1)
CompilerEndIf