Ensuring numeric input

Michael J. Lew michaell at unimelb.edu.au
Wed Oct 26 23:58:28 EDT 2005


Thanks for the suggestions, but unfortunately it doesn't seem to be 
anywhere near that easy. A user can put the insertion point within a 
number and so I need to check before the character is entered whether 
the value will be a number after the new character is added at the 
insertion point. The new character may be at the start of a numeric 
string, in the middle or at the end. I can't find an easy function 
that gives the insertion point relative to the selectedLine. Most of 
the complexity of my script is in deciding where the insertion will 
be made in the line of interest.

Still lacking a simple solution...

At 8:56 PM -0500 26/10/05, use-revolution-request at lists.runrev.com wrote:
>the isNumber of value
>isNumber(value)
>
>isNumber(8) -- returns true
>isNumber(1+5) -- returns true
>isNumber(foo) -- returns false
>
>Dennis

Thanks, but the 'isnumber' function is the same as the 'is a number' 
that I used in my script.


At 8:56 PM -0500 26/10/05, use-revolution-request at lists.runrev.com wrote:
>You can also add zero to it; if it is a number then the result will be
>empty.
>Paul Looney

Thanks, but that is not functionally different from simply using 'is 
a number'. Or is it?

At 10:34 AM +1000 27/10/05, Michael J. Lew wrote:
>How can I prevent users from being able to make non-number values in 
>a field? Simply preventing non-numeric keys is not enough because I 
>need to prevent things that use characters that are in valid numbers 
>to make non-numbers like 1.2.3 or -1.2-3.
>
>I thought it would be relatively easy, but it might not be. Here is 
>the field script of a surprisingly complicated attempt:
>
>on keydown thekey
>   if theKey is in "0123456789-." then --may be an allowable input
>     -- but I still need to check whether the result would be a valid number.
>     put value(the selectedLine) into thisLine --current number
>     put length(thisLine) into thisLineLen
>     put the selectedCHunk into sc --returns character locations from 
>start of field
>    
>     --Need to find where the current line starts
>     put offset(thisLine,me,min(0,word 2 of sc-thislinelen)) into thisLineStart
>     --The characters to skip bit is an attempt to prevent the offset function
>     --  from returning a match to an earlier line in the field.
>     --  It needs the min function to prevent negative values.
>    
>     --Now see if the input would make a non-numeric result
>     --First find where the selection point is in the line
>     put word 2 of sc +1 - thisLineStart into theSelectionStartChar
>     put word 4 of sc +1 - thisLineStart into theSelectionEndChar
>     --I don't know why I had to add one to the values...
>     put thisLineStart & return & theSelectionStartChar && theSelectionEndCHar
>     --Now test the input in the relevant place
>     put theKey into char theSelectionStartChar to 
>theSelectionEndChar of thisLine
>    
>     --next line to help debugging
>     --put  thisLine & return & thisLineStart & return & 
>theSelectionStartChar && theSelectionEndChar
>    
>     if thisLine & "0" is a number then --should be OK
>       --Needs the appended zero to allow a line to start with a decimal point.
>       pass KeyDown
>     end if
>   end if
>end keydown
>
>
>It seems to work, but it's an extraordinarily long and winding road 
>to get to a simple end-point. What am I missing?
>
>Thanks,
>Michael



-- 
Michael J. Lew

Senior Lecturer
Department of Pharmacology
The University of Melbourne
Parkville 3010
Victoria
Australia

Phone +613 8344 8304

**
New email address: michaell at unimelb.edu.au
**



More information about the use-livecode mailing list