| Title: | *OLD* ALL-IN-1 (tm) Support Conference | 
| Notice: | Closed - See Note 4331.l to move to IOSG::ALL-IN-1 | 
| Moderator: | IOSG::PYE | 
| Created: | Thu Jan 30 1992 | 
| Last Modified: | Tue Jan 23 1996 | 
| Last Successful Update: | Fri Jun 06 1997 | 
| Number of topics: | 4343 | 
| Total number of notes: | 18308 | 
I have an application in which I wish to validate some fields to ensure that 
certain characters have not been entered.
I do not want to use the MAKE_FILE_NAME function (as is used in places around 
ALL-IN-1) as this would invalidate spaces.
I am using the following code:-
;;~~VALID_TEXT~~;;
GET #VALID = OA$Y\
GET OA$FUNC = '.IF ' OA$FIELD_NAME ' CONTAINING "?" OR
 ' OA$FIELD_NAME ' CONTAINING ":" OR
 ' OA$FIELD_NAME ' CONTAINING "*" OR
 ' OA$FIELD_NAME ' CONTAINING "+" OR
 ' OA$FIELD_NAME ' CONTAINING "-" THEN GET #VALID = OA$N'\
.IF #VALID EQS OA$Y
 THEN OA$VAL_SET_VALID
 ELSE GET OA$DISPLAY = "You have entered invalid charcters"\\
      FORCE\\
      GET OA$FUNC = 'OA$FLD_STAY ' OA$FIELD_NAME
This code works fine as shown. The problem occurs in trying to work out the 
syntax for invalidating the single and double quotes (' and ").
I have tried:-
GET OA$FUNC = '.IF ' OA$FIELD_NAME ' CONTAINING "'''" THEN GET #VALID = OA$N'
GET OA$FUNC = ".IF " OA$FIELD_NAME " CONTAINING '"""' THEN GET #VALID = OA$N"
Neither seems correct (although no error message is given - the text for 
OA$DISPLAY is simply not displayed...)
What would the correct syntax be?
Cheers,
Andy
| T.R | Title | User | Personal Name | Date | Lines | 
|---|---|---|---|---|---|
| 1525.1 | IOSG::MAURICE | See below | Tue Sep 29 1992 13:08 | 12 | |
|     Hi,
    
    Try:
    
GET OA$FUNC = '.IF ' OA$FIELD_NAME ' CONTAINING "''" THEN GET #VALID = OA$N'
GET OA$FUNC = ".IF " OA$FIELD_NAME " CONTAINING '""' THEN GET #VALID = OA$N"
    
    The principle is that you need to double the quote.
    
    Cheers
    
    Stuart
 | |||||
| 1525.2 | Solution | SCOTTC::MARSHALL | Do you feel lucky? | Tue Sep 29 1992 13:26 | 48 | 
| Hi,
The best solution to your problem is, I think, to remove one level of quotation
marks: use OA$FIELD_TEXT instead of OA$FIELD_NAME, then you don't need the
GET OA$FUNC = stuff, so just have:
.IF OA$FIELD_TEXT CONTAINING "?" OR
 OA$FIELD_TEXT CONTAINING ":" OR
 OA$FIELD_TEXT CONTAINING "*" OR
 OA$FIELD_TEXT CONTAINING "+" OR
 OA$FIELD_TEXT CONTAINING "-" OR
 OA$FIELD_TEXT CONTAINING "'" OR
 OA$FIELD_TEXT CONTAINING '"' THEN GET #VALID = OA$N'\
.IF #VALID EQS OA$Y
 THEN OA$VAL_SET_VALID
 ELSE GET OA$DISPLAY = "You have entered invalid characters"\\
      FORCE\\
      GET OA$FUNC = 'OA$FLD_STAY ' OA$FIELD_NAME
You can simplify this even further, viz:
/VALID=<.IF OA$FIELD_TEXT <=> "?" OR OA$FIELD_TEXT <=> ":" OR
            OA$FIELD_TEXT <=> "*" OR OA$FIELD_TEXT <=> "+" OR
            OA$FIELD_TEXT <=> "-" OR OA$FIELD_TEXT <=> "'" OR
            OA$FIELD_TEXT <=> '"'
        THEN OA$VAL_SET_VALID
        ELSE GET OA$DISPLAY = "You have entered invalid characters"
You don't need the FORCE or OA$FLD_STAY.
And finally, to use the same validation code for lots of fields, use:
/VALID=<XOP "~~VALIDATE~~"
    :
    :
    :
;;~~VALIDATE~~;;
.IF OA$FIELD_TEXT ...
    ... THEN OA$VAL_SET_VALID ...
        ELSE GET OA$DISPLAY = "..."
ie you don't even need to OA$FLD_STAY stuff to do it this way.
Also note I haven't tested any of this, it's meant as suggestions/ideas
Scott
 | |||||