web-dev-qa-db-fra.com

Comment valider le code postal américain à l'aide du plug-in de validation jQuery

J'utilise le plugin jQuery Validation pour valider mon formulaire.

Je veux valider le code postal selon le format US ZIPCode: -

> 12345
> 12345-6789
> 12345 6789

Selon mon code actuel, sa validation du code postal doit être au maximum de 5 et entièrement numérique.

Veuillez consulter le code ci-dessous:

    <script src="~/Scripts/js/jquery.validate.js"></script>

<script>

    $().ready(function () {

        // validate signup form on keyup and submit
        $("#locationSetup").validate({
            rules: {
                'Address.AddressStreet': "required",
                'Address.City': "required",
                'Address.State.Country.CountryIsoCode': "required",
                'Address.State.SubnationalIsoCode': "required",
                'Address.PostalCode': {
                    required: true,
                    minlength: 5,
                    maxlength: 5,
                    digits: true
                }
            },
            messages: {
                'Address.AddressStreet': "Please enter your Street Address!",
                'Address.City': "Please select your City!",
                'Address.State.Country.CountryIsoCode': "Please  select your Country!",
                'Address.State.SubnationalIsoCode': "Please  select your State!",
                'Address.PostalCode': {
                    required: "Please enter your Postal Code!",
                    minlength: "Your Postal Code must be 5 numbers!",
                    maxlength: "Your Postal Code must be 5 numbers!",
                    digits: "Your Postal Code must be 5 numbers!"
                }
            }
        });

    });
</script>

@using (Html.BeginForm(Model.Step.ToString(), "Provision", FormMethod.Post, new Dictionary<string, object> { { "id", "locationSetup" } }))

<table width="100%" id="locInfo">
            <colgroup>
                <col width="30%" />
                <col />
            </colgroup>
            <tr>
                <th><label>@AddressResource.COUNTRY_LABEL_TEXT:</label> <span class="redtext">(Required)</span></th>
                <td>
                   @* @Html.HiddenFor(m => m.Address.State.Country.CountryIsoCode)*@
                   @Html.DropDownListFor(m => m.Address.State.Country.CountryIsoCode, ProvisioningHubProxy.GetCountriesList(),
                                htmlAttributes: new { @id = "Countries", @name = "Countries" })
                </td>
            </tr>
            <tr>
                <th> <label>@AddressResource.STATES_LABEL_TEXT:</label><span class="redtext">(Required)</span></th>
                <td> @Html.DropDownListFor(m => m.Address.State.SubnationalIsoCode, ProvisioningHubProxy.GetStatesList(),
                                htmlAttributes: new { @id = "States", @name = "States" })</td>
            </tr>
            <tr>
                <th><label>@AddressResource.CITY_LABEL_LABEL_TEXT:</label><span class="redtext">(Required)</span></th>
                <td> @Html.TextBoxFor(m => m.Address.City, htmlAttributes: new { @name = "City", @id = "City" })</td>
            </tr>
            <tr>
                <th> <label>@AddressResource.STREET_NAME_LABEL_TEXT:</label><span class="redtext">(Required)</span></th>
                <td>@Html.TextBoxFor(m => m.Address.AddressStreet, htmlAttributes: new { @name = "StreetName", @id = "StreetName" })</td>
            </tr>
            <tr>
                <th><label>@AddressResource.US_POSTAL_CODE_LABEL_TEXT:</label><span class="redtext">(Required)</span></th>
                <td>@Html.TextBoxFor(m => m.Address.PostalCode, htmlAttributes: new { @name = "ZipCode", @id = "ZipCode", @required = "required" })</td>
            </tr>
        </table>

}

Veuillez suggérer.

18
UID

Ajoutez un validateur personnalisé:

jQuery.validator.addMethod("zipcode", function(value, element) {
  return this.optional(element) || /^\d{5}(?:-\d{4})?$/.test(value);
}, "Please provide a valid zipcode.");

_Si vous souhaitez accepter des espaces1 entre le code postal, utilisez à la place /^\d{5}(?:[\s-]\d{4})?$/ pour le modèle.

puis spécifiez-le dans vos options:

rules: {
  ...
  'Address.PostalCode': {
    ...
    zipcode: true,
    ...
  },
  ...
}

Notez que la bibliothèque d'extensions additional-methods.js possède également un validateur zipcodeUS (mais à moins que vous n'utilisiez l'un des autres, il peut être inutile de l'inclure).


1 Selon les spécifications, les codes postaux correctement formatés se composent de cinq (5) chiffres ou de cinq (5) chiffres suivis d'un trait d'union (-) et de quatre (4) numéros supplémentaires. Un espace ne devrait pas techniquement être acceptable, mais je fournirai le modèle malgré tout.

29
Brad Christie

Incluez simplement le additional-methods.js file et utilisez la règle zipcodeUS.

$("#locationSetup").validate({
    rules: {
        // rules,
        'Address.PostalCode': {
            required: true,
            zipcodeUS: true // <-- use it like this
        }
    },
....

Si vous ne souhaitez pas inclure le additional-methods.js fichier, vous pouvez copier la méthode suivante dans votre code ...

jQuery.validator.addMethod("zipcodeUS", function(value, element) {
    return this.optional(element) || /\d{5}-\d{4}$|^\d{5}$/.test(value)
}, "The specified US Zip Code is invalid");
15
Sparky

Vous pouvez définir un validateur personnalisé:

jQuery.validator.addMethod('zipcode', function(value, element) {
  return this.optional(element) || !!value.trim().match(/^\d{5}(?:[-\s]\d{4})?$/);
}, 'Invalid Zip code');

Ensuite, utilisez-le comme ceci

<input class="zipcode"/>
2
Blago

Les routines de validation du code postal sont fournies dans additional-methods.js, mais je me demande pourquoi vous demandez des informations sur le pays si vous souhaitez invalider le formulaire pour un pays autre que les États-Unis? N'oubliez pas que seulement environ 5% de la population mondiale utilise un code postal américain. Je vous recommande de faire en sorte que les routines de validation des codes postaux dépendent du pays réellement sélectionné par l'utilisateur.

1
Paul Smith