Proper Field Validation Methods and other annoyances...
Björnke von Gierke
bvg at mac.com
Fri Sep 7 06:49:11 EDT 2007
http://quality.runrev.com/qacenter/show_bug.cgi?id=5300
On 06 Sep 2007, at 23:49, Frank D. Engel, Jr. wrote:
> Wow, let's put together a new feature request for BZ...
>
> How about, "is a user readable date", or "is really a date"?
>
> "is a formatted date"?
>
>
> On Aug 15, 2007, at 12:21 PM, Rob Cozens wrote:
>
>> Hi Len,
>>
>>> 1) Why does put "4" is a date return true? If this function
>>> doesn't actually work, why is it still available? I'd like to be
>>> able to have users enter a date without any kind of punctuation
>>> (i.e., 08142007) and be able to validate it as a valid date. The
>>> same applies to entering 1315 as a time (no colon).
>>
>> Others have explained why "is a date" returns true for any integer.
>>
>> Here is a function that validates user input as valid according to
>> the current system date format and returns the date in dateItems
>> format.
>>
>> function validDate theString -- 5 April 04:RCC
>> put stripBlanks(theString,false) into theString -- strips leading
>> or trailing blanks from a string
>> get systemDateFormat() -- see Called Routines below
>> set the itemDelimiter to char -1 of it -- the Separater
>> if the number of items of theString <> 3 then return false
>> delete the last char of it
>> delete char offset("mm",it) of it -- remove double characters, if
>> any...
>> -- which
>> there will be until RR system date
>> -- correctly
>> recognizes suppression of leading
>> -- zeroes
>> delete char offset("dd",it) of it
>> delete char offset("yy",it) of it
>> repeat with x = 1 to 3
>> switch char x of it
>> case "m"
>> put item x of theString into theMonth
>> if not validDigits(theMonth) then return false -- each char >=
>> "0" and <= "9"
>> if theMonth < 1 or theMonth > 12 then return false
>> break
>> case "d"
>> put item x of theString into theDay
>> if not validDigits(theDay) then return false
>> if theDay < 1 or theDay > 31 then return false
>> break
>> case "y"
>> put item x of theString into theYear
>> if not validDigits(theYear) then return false
>> put length(theYear) into charCount
>> if charCount <> 2 and charCount <> 4 then return false
>> if charCount is 2 then add 2000 to theYear
>> if theYear < 1 then return false
>> break
>> end switch
>> end repeat
>> if theDay < 29 then return
>> true&return&theYear&comma&theMonth&comma&theDay&",0,0,0,0"
>> if theMonth is 2 then
>> if theDay > 29 or not leapYear(theYear) then return false --
>> leapYear returns boolean
>> else return
>> true&return&theYear&comma&theMonth&comma&theDay&",0,0,0,0"
>> else
>> if offset("0",theMonth) = 1 then delete char 1 of theMonth
>> set the itemDelimiter to comma
>> if theMonth is among the items of "1,3,5,7,8,10,12" then return
>> true&return&theYear&comma&theMonth&comma&theDay&",0,0,0,0"
>> if theDay is 31 then return false
>> else return
>> true&return&theYear&comma&theMonth&comma&theDay&",0,0,0,0"
>> end if
>> end validDate
>>
>> Cal;led routines:
>>
>> function systemDateFormat
>> put "1999,1,9,0,0,0,0" into testDate
>> convert testDate to short system date -- RR pads day/month
>> regardless of settings
>>
>> -- which means function will not recognize the
>>
>> -- absence of leading zeroes until this is fixed
>> put 2 into characterNumber
>> repeat while char characterNumber of testDate is in "1,9"
>> add 1 to characterNumber
>> end repeat
>> put char characterNumber of testDate into dateSeparater
>> put empty into returnDateFormat
>> set the itemDelimiter to dateSeparater
>> repeat for each item datePart in testDate
>> if datePart > 9 then
>> if datePart > 99 then put "y" after returnDateFormat
>> put "y" after returnDateFormat
>> else if datePart > 1 then
>> if length(datePart) > 1 then put "d" after returnDateFormat
>> put "d" after returnDateFormat
>> else
>> if length(datePart) > 1 then put "m" after returnDateFormat
>> put "m" after returnDateFormat
>> end if
>> end repeat
>> return returnDateFormat&dateSeparater
>> end systemDateFormat
>>
>>
>>> 2) This is the "biggie." What is the proper way to validate the
>>> contents of a field. I tried writing a "closeField" script that
>>> would do the validation, put up a message box if the format/contents
>>> are wrong, then set the focus back to the field for correction by
>>> the user. I end up getting two insertion point cursors (one in the
>>> "bad" field and one in the next field. The keyboard does go to the
>>> bad field but having more than one insertion point is confusing to
>>> me let alone my end users. By the way, I have tried not passing the
>>> closeField message but I'm not sure if the "tab to next field" takes
>>> place anyway.
>>
>> Among my back burner projects is a Data Dictionary-driven RAD, which
>> will validate user input in a field as compliant with the Data
>> Dictionary specifications for the data that field captures (eg:
>> required?, numeric?, # of decimal positions, show thousands
>> separator?, show currency symbol?, lookup table, autoentry?, max
>> length, max lines, etc). Only some of the edits have been tested at
>> this stage; but all that our working are triggered by closeField,
>> enterInField (and returnInField for single-line fields),or internal
>> logic if auto-entry fields, and I have not experienced the problems
>> you describe.
>>
>> However, I would note that my user interface keeps ALL fields without
>> focus locked while accepting user input in a field. When the user
>> signals "I'm done", the field contents are validated to DD specs. If
>> invalid, an error message is displayed; if valid, the field is locked
>> and the next (either by ordinal or based on the user input) field is
>> unlocked and given focus.
>>
>>> 3) Related to #2 above, I frequently get vertical lines (insertion
>>> point cursors) in a field as I move the mouse across it. Once they
>>> start showing up, (and they stay so I end up with vertical bars
>>> between every letter in the field!), I can get them to appear by
>>> moving the mouse ABOVE the field (not in it) like I have a vertical
>>> line that runs the height of the entire screen. Is this something
>>> I'm doing or is it a known problem?
>>
>> Do you get the same effect from a standalone compiled from your stack?
>>
>> Rob Cozens CCW
>> Serendipity Software Company
>>
>> "And I, which was two fooles, do so grow three;
>> Who are a little wise, the best fooles bee."
>>
>> from "The Triple Foole" by John Donne (1572-1631)
>> _______________________________________________
>> use-revolution mailing list
>> use-revolution at lists.runrev.com
>> Please visit this url to subscribe, unsubscribe and manage your
>> subscription preferences:
>> http://lists.runrev.com/mailman/listinfo/use-revolution
>>
>
>
>
> _________________________________________________________________
> Need personalized email and website? Look no further. It's easy
> with Doteasy $0 Web Hosting! Learn more at www.doteasy.com
> _______________________________________________
> use-revolution mailing list
> use-revolution at lists.runrev.com
> Please visit this url to subscribe, unsubscribe and manage your
> subscription preferences:
> http://lists.runrev.com/mailman/listinfo/use-revolution
>
More information about the use-livecode
mailing list