You are viewing a plain text version of this content. The canonical link for it is here.
Posted to user@struts.apache.org by Wendy Smoak <ja...@wendysmoak.com> on 2005/03/01 16:36:49 UTC
[validation] Help with 'contains' validation
(No luck on commons-user; trying again here.)
I'm trying to validate a password such that it cannot contain the userId.
Is this something I can do in validation.xml?
I'm currently using a mask in validation.xml:
<field property="password" depends="required,mask">
<arg0 key="label.password"/>
<var>
<var-name>mask</var-name>
<var-value>^[0-9a-zA-Z!%*-_+=:,\./?]*$</var-value>
</var>
</field>
(And I'm not very good at regular expressions, so if there's a better way to
say "letter, digit, or any of these special characters, I would appreciate a
suggestion.)
Can it be done with validwhen? How do I say "does not _contain_ userId"?
I'd like it to be case insensitive, but could live without that if it's
easier.
Thanks,
Wendy Smoak
---------------------------------------------------------------------
To unsubscribe, e-mail: user-unsubscribe@struts.apache.org
For additional commands, e-mail: user-help@struts.apache.org
Re: [validation] Help with 'contains' validation
Posted by Erik Weber <er...@mindspring.com>.
To ignore case, just convert the two Strings to uppercase before you
test if one contains the other.
Hope I'm understanding the problem correctly . . .
Erik
Erik Weber wrote:
> This is untested (!), but adapted from a working "twofields"
> validation method (used to make sure password1 matches password2,
> etc.), so it shouldn't be far off the mark.
>
> validation.xml:
>
> <!-- nothing real unusual here -->
> <field property="userID" depends="required,minlength,maxlength">
> <arg0 key="label.userID"/>
> <arg1 name="minlength" key="${var:minlength}" resource="false"/>
> <arg2 name="maxlength" key="${var:maxlength}" resource="false"/>
> <!-- error message would be something like "{0} cannot contain
> fewer than {1} characters", where
> the first arg comes from the bundle (label.userID), but
> the second arg literally comes
> from var-value stated here (because resource = "false")
> -->
> <var>
> <var-name>minlength</var-name>
> <var-value>3</var-value>
> </var>
> <var>
> <var-name>maxlength</var-name>
> <var-value>20</var-value>
> </var>
> </field>
>
> <!-- using the new custom rule (password value cannot contain
> userID value) -->
> <field property="password" depends="required,mustNotContainUserID">
> <arg0 key="label.password"/>
> <arg1 name="mustNotContainUserID" key="label.userID"/>
> <!-- error message would be something like "{0} value must not
> contain value of {1}", or
> "password value must not contain value of userID", if
> custom rule is violated -->
> <var>
> <var-name>fieldToTest</var-name>
> <var-value>userID</var-value>
> </var>
> </field>
>
>
> validator-rules.xml:
>
> <!-- twoFields -->
> <validator name="mustNotContainUserID"
> classname="ValidationUtil"
> method="validateDoesNotContainUserID"
> methodParams="java.lang.Object,
> org.apache.commons.validator.ValidatorAction,
> org.apache.commons.validator.Field,
> org.apache.struts.action.ActionErrors,
> javax.servlet.http.HttpServletRequest"
> depends="required"
> msg="errors.mustNotContainUserID"/>
> <!-- not sure the difference between depends="required" here
> versus in the field config above -->
>
>
> ValidationUtil (classname and method specified in validator-rules.xml)
>
> public static boolean validateDoesNotContainUserID(Object bean,
> ValidatorAction va, Field field, ActionErrors errors,
> HttpServletRequest request) {
> String value = ValidatorUtil.getValueAsString(bean,
> field.getProperty());//value of password field
> String sProperty2 = field.getVarValue("fieldToTest");
> String value2 = ValidatorUtil.getValueAsString(bean,
> sProperty2);//value of field specified by "fieldToTest" -- userID
> if (!GenericValidator.isBlankOrNull(value)) {
> try {
> if (value.indexOf(value2) != -1) {
> errors.add(field.getKey(), Resources.getActionError(request,
> va, field));
> return false;
> }
> } catch (Exception e) {
> errors.add(field.getKey(), Resources.getActionError(request,
> va, field));
> return false;
> }
> }
> return true;
> }
>
>
>
> Erik
>
>
>
>
> Wendy Smoak wrote:
>
>> (No luck on commons-user; trying again here.)
>>
>> I'm trying to validate a password such that it cannot contain the
>> userId.
>> Is this something I can do in validation.xml?
>>
>> I'm currently using a mask in validation.xml:
>> <field property="password" depends="required,mask">
>> <arg0 key="label.password"/>
>> <var>
>> <var-name>mask</var-name>
>> <var-value>^[0-9a-zA-Z!%*-_+=:,\./?]*$</var-value>
>> </var>
>> </field>
>>
>> (And I'm not very good at regular expressions, so if there's a better
>> way to
>> say "letter, digit, or any of these special characters, I would
>> appreciate a
>> suggestion.)
>>
>> Can it be done with validwhen? How do I say "does not _contain_
>> userId"?
>> I'd like it to be case insensitive, but could live without that if it's
>> easier.
>>
>> Thanks,
>> Wendy Smoak
>>
>>
>> ---------------------------------------------------------------------
>> To unsubscribe, e-mail: user-unsubscribe@struts.apache.org
>> For additional commands, e-mail: user-help@struts.apache.org
>>
>>
>>
>>
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: user-unsubscribe@struts.apache.org
> For additional commands, e-mail: user-help@struts.apache.org
>
>
---------------------------------------------------------------------
To unsubscribe, e-mail: user-unsubscribe@struts.apache.org
For additional commands, e-mail: user-help@struts.apache.org
Re: [validation] Help with 'contains' validation
Posted by Erik Weber <er...@mindspring.com>.
This is untested (!), but adapted from a working "twofields" validation
method (used to make sure password1 matches password2, etc.), so it
shouldn't be far off the mark.
validation.xml:
<!-- nothing real unusual here -->
<field property="userID" depends="required,minlength,maxlength">
<arg0 key="label.userID"/>
<arg1 name="minlength" key="${var:minlength}" resource="false"/>
<arg2 name="maxlength" key="${var:maxlength}" resource="false"/>
<!-- error message would be something like "{0} cannot contain
fewer than {1} characters", where
the first arg comes from the bundle (label.userID), but
the second arg literally comes
from var-value stated here (because resource = "false") -->
<var>
<var-name>minlength</var-name>
<var-value>3</var-value>
</var>
<var>
<var-name>maxlength</var-name>
<var-value>20</var-value>
</var>
</field>
<!-- using the new custom rule (password value cannot contain
userID value) -->
<field property="password" depends="required,mustNotContainUserID">
<arg0 key="label.password"/>
<arg1 name="mustNotContainUserID" key="label.userID"/>
<!-- error message would be something like "{0} value must not
contain value of {1}", or
"password value must not contain value of userID", if
custom rule is violated -->
<var>
<var-name>fieldToTest</var-name>
<var-value>userID</var-value>
</var>
</field>
validator-rules.xml:
<!-- twoFields -->
<validator name="mustNotContainUserID"
classname="ValidationUtil"
method="validateDoesNotContainUserID"
methodParams="java.lang.Object,
org.apache.commons.validator.ValidatorAction,
org.apache.commons.validator.Field,
org.apache.struts.action.ActionErrors,
javax.servlet.http.HttpServletRequest"
depends="required"
msg="errors.mustNotContainUserID"/>
<!-- not sure the difference between depends="required" here versus
in the field config above -->
ValidationUtil (classname and method specified in validator-rules.xml)
public static boolean validateDoesNotContainUserID(Object bean,
ValidatorAction va, Field field, ActionErrors errors, HttpServletRequest
request) {
String value = ValidatorUtil.getValueAsString(bean,
field.getProperty());//value of password field
String sProperty2 = field.getVarValue("fieldToTest");
String value2 = ValidatorUtil.getValueAsString(bean,
sProperty2);//value of field specified by "fieldToTest" -- userID
if (!GenericValidator.isBlankOrNull(value)) {
try {
if (value.indexOf(value2) != -1) {
errors.add(field.getKey(), Resources.getActionError(request,
va, field));
return false;
}
} catch (Exception e) {
errors.add(field.getKey(), Resources.getActionError(request, va,
field));
return false;
}
}
return true;
}
Erik
Wendy Smoak wrote:
>(No luck on commons-user; trying again here.)
>
>I'm trying to validate a password such that it cannot contain the userId.
>Is this something I can do in validation.xml?
>
>I'm currently using a mask in validation.xml:
> <field property="password" depends="required,mask">
> <arg0 key="label.password"/>
> <var>
> <var-name>mask</var-name>
> <var-value>^[0-9a-zA-Z!%*-_+=:,\./?]*$</var-value>
> </var>
> </field>
>
>(And I'm not very good at regular expressions, so if there's a better way to
>say "letter, digit, or any of these special characters, I would appreciate a
>suggestion.)
>
>Can it be done with validwhen? How do I say "does not _contain_ userId"?
>I'd like it to be case insensitive, but could live without that if it's
>easier.
>
>Thanks,
>Wendy Smoak
>
>
>---------------------------------------------------------------------
>To unsubscribe, e-mail: user-unsubscribe@struts.apache.org
>For additional commands, e-mail: user-help@struts.apache.org
>
>
>
>
---------------------------------------------------------------------
To unsubscribe, e-mail: user-unsubscribe@struts.apache.org
For additional commands, e-mail: user-help@struts.apache.org