0

我在 Python http://formencode.readthedocs.org/en/latest/modules/national.html#module-formencode.national中使用 FormEncode 。

我正在尝试为巴西添加自定义邮政编码验证器。我已经阅读了文档,但似乎都没有帮助。有谁知道如何解决这个问题?

4

2 回答 2

0

如果有人想知道如何使用 FormEncode 解决这个问题,这就是我想出的解决方案

class BrazilZipValidator(validators.Regex):
messages = {
    'invalid': _('Please enter a valid code (nnnnn-nnn or nnnnnnnn)')
}
regex = re.compile(r'^([0-9]{8})$|^([0-9]{5}-[0-9]{3})$')
strip = True

def _to_python(self, value, state):
    self.assert_string(value, state)
    match = self.regex.search(value)
    if not match:
        raise formencode.Invalid(self.message('invalid', state), value, \
                                 state)
    return match.group()

然后将此类附加到验证对象

national.PostalCodeInCountryFormat._vd.update({'BR': BrazilZipValidator})
于 2015-07-23T20:16:17.543 回答
-2

模型

[checkCountry(AllowCountry = "India,USA,SriLanka", ErrorMessage = ("Please choose a valid country eg.(India,USA,SriLanka"))]
public string Country { get; set; }

在属性复制粘贴此代码,请更改命名空间名称以避免错误

using System.Linq;


namespace WebApp.Models
{
    public class checkCountryAttribute : ValidationAttribute
    {
        public String AllowCountry { get; set; }

        protected override ValidationResult IsValid(object country, ValidationContext validationContext)

        {

            string[] myarr = AllowCountry.ToString().Split(',');

            if (myarr.Contains(country))

            {

                return ValidationResult.Success;

            }

            else

            {

                return new ValidationResult("Please choose a valid country eg.(India,USA,SriLanka)");

            }

        }
    }
}

控制器:

[ValidateAntiForgeryToken]
        [HttpPost]
        public ActionResult Student(Student submit)
        {
            if (ModelState.IsValid)
            {
                ViewBag.Message = "Succesfully Submitted";
                return View("Student");
            }
            return View();
        }

肯定会奏效

如果此代码不起作用,请在下面评论

于 2019-02-11T17:35:15.390 回答