Awesome stuff Rob! Mine was not that advanced.
It just allowed the permitted characters upon being typed in, then checked to see if it is a valid number with the isnumber function on closefield. If it was not a number, it emptied the field and told you to try again. -----Original Message----- From: [EMAIL PROTECTED] [mailto:[EMAIL PROTECTED] On Behalf Of Rob Cozens Sent: Wednesday, March 16, 2005 11:35 AM To: How to use Revolution Subject: RE: How to test for a number Hi Jonathan, >I have a field where I restrict it to only enter numbers... > >But I had to include extra script to allow the character to be a "." or a >"-", in case the number included a decimal point or minus sign: > >On KeyDown theKey > If (isNumber(theKey) = true) or theKey = "." or theKey = "-" then > pass keyDown >End KeyDown And you do check to see there is only one "." and/or "-" in the character string, and that "-", if any, is char 1 or -1, right? The following function is included in Serendipity Library <http://wecode.org/serendipity/>. It checks for your issues and Klaus'; based on the contents of the stack's numberEditMask custom property, which designates decimal & thousands separator characters, currency symbol (to three characters}, and currency symbol placement (leading/trailing). function validNumber theString,allowCurrency -- 08 Jan 04:RCC put (allowCurrency is true) into allowCurrency--defaults to false get the numberEditMask of this stack if it is empty then modal "Number Edit Mask" get the numberEditMask of this stack if it is empty then return sdbMessage(sdbNumberFormatError) end if put (char 1 of it is "<") into prefixCurrancy put char 2 to -1 of line 1 of it into currencyString put char 1 of line 2 of it into theDecimalSeparator put char 2 of line 2 of it into theThousandsSeparator put stripBlanks(theString,false) into strippedString put the length of strippedString into stringLength put 0 into periodPosition put 0 into characterNumber put empty into commaList put false into foundMinus repeat for each char theCharacter in theString add 1 to characterNumber if theCharacter is not in "0123456789-" and theCharacter is not theDecimalSeparator and theCharacter is not theThousandsSeparator and (theCharacter is not in currencyString or not allowCurrency) then return false if theCharacter is "-" then if foundMinus or (characterNumber <> 1 and (characterNumber <> (length(currencyString)+1) or not allowCurrency or not prefixCurrency)) then return false put true into foundMinus end if if theCharacter is in currencyString then if not allowCurrency then return false if prefixCurrency then if characterNumber > length(currencyString) or offset(currencyString,theString) <> 1 then return false end if else if offset(currencyString,theString) <> (length(theString)-length(currencyString)+1) then return false end if if theCharacter is theThousandsSeparator then if periodPosition is not 0 or characterNumber is 1 then return false else put characterNumbe&return after commaList end if if theCharacter is theDecimalSeparator then put characterNumber into periodPosition end repeat if commaList is empty then return true if periodPosition is 0 then put stringLength+1 into periodPosition repeat with x = number of lines of commaList down to 1 get (line x of commaList+0) if periodPosition - it <> 4 then return false subtract 4 from periodPosition end repeat return true end validNumber The Library includes other handlers to strip the thousand separators and force the decimal separator to "." for numeric manipulation and convert calculation results for localized display. Rob Cozens, CCW Serendipity Software Co. "First they ignore you. Then they laugh at you. Then they fight you. Then you win." -- Gandhi _______________________________________________ use-revolution mailing list [email protected] http://lists.runrev.com/mailman/listinfo/use-revolution _______________________________________________ use-revolution mailing list [email protected] http://lists.runrev.com/mailman/listinfo/use-revolution
