Thanks Bruno and Anthony, that worked. For others who might need this, this is my code:
def validate_my_form(form): destination = form.vars.destination log.error("call_channel='%s'" % (form.vars.call_channel)) if form.vars.call_channel == VOICEMAIL_CHANNEL: _, err_msg = IS_EMAIL()(destination) if err_msg: form.errors.destination = err_msg elif form.vars.call_channel == PHONE_CHANNEL: _, err_msg = IS_MATCH('\+[0-9]+', error_message=T('Enter a phone number, in international format'))(destination) if err_msg: form.errors.destination = err_msg elif form.vars.call_channel == SIP_CHANNEL: _, err_msg = IS_EMAIL(error_message=T('Enter a valid SIP address'))( destination) if err_msg: form.errors.destination = err_msg else: form.errors.call_channel = "call_channel=%s not supported" % (form. vars.call_channel) On Tuesday, September 4, 2012 9:55:20 PM UTC+2, Anthony wrote: > > For phone and sip address, you could use the IS_MATCH validator with an > appropriate regular expression defined. Or you could create a custom > validator. > > Bruno covered your other question. > > Anthony > > On Tuesday, September 4, 2012 3:09:42 PM UTC-4, Daniel Gonzalez wrote: >> >> Hi, >> >> In my application I have a form with (among other data), the following >> two fields: >> >> - channel: a set with three possible values: "voicemail", >> "sipaddress" or "phone". >> - destination: a string, the meaningf of which depends on the value >> of channel. >> >> I have the problem that I attach a validation rule ("require") to the >> destination field, because the validation rule depends on the value of >> "channel" >> >> What I would like to do is to leave the validation rule of the >> destination empty, and then do a manual validation, depending on the value >> of "channel". >> The rest of the fields would be validated as usual, with form.process(), >> but the destination would be validated manually. >> >> Something like this: >> >> if form.process().accepted: >> if request.var.channel == 'voicemail': validate requests.var.destination >> as a mail address. >> elif request.var.channel == 'sipaddress' validate >> requests.var.destination >> as a sip address. >> elfi request.var.channel == 'phone' validate requests.var.destination >> as a telephone number >> >> >> I have two questions: >> >> - has web2py suppot for validation of telephone numbers and sip >> addresses? >> - how can I manually apply validation rules, so that I can apply >> complex algorithms as the one described while validating? >> >> Thanks >> Daniel >> > --