Code Monkey home page Code Monkey logo

validationjs's Introduction

validationjs

validationjs可以帮助你更好的定义输入模型和验证输入的数据

What is validationjs?

  • 链式调用 模型的定义更简单,更语义话
  • validationjs 提供了丰富的数据类型、约束、字段的描述、示例。

Demo

router.all('/signin', function(req, res) {
    var signin = validator("SigninForm")
        .field("username")
            .label('Username')
            .description("email address as login credentials")
            .placeholder('[email protected]')
            .required()
            .email()
        .field("password")
            .label("Password")
            .description("Password length must greater 4")
            .placeholder("Please type a strong password")
            .required()
            .min(4)
            .constraint(function(fieldName, fieldLabel, data) {
                var username = data['username'],
                    password = crypto
                        .createHmac('sha1', '')
                        .update(data['password'])
                        .digest('hex')

                var query = {
                    username: username,
                    hashedPassword: password
                }
                return User.findOne(query).then(function(user) {
                    if (null == user) {
                        return ["Wrong username or password"]
                    }
                }).catch(function(error) {
                    console.stack(error)
                })
            })
        .new()

    var render = function() {
        res.render('signin', {
            form: signin
        })
    }

    if ("POST" == req.method) {
        debug("/signin post")
        signin.validate(req.body).then(function() {
            if (signin.valid())
                res.render('signin_success')
            else
                render()
        }).catch(function(error) {
            debug(error)
            debug(error.stack)
        })
    } else
        render()
})

Jade template

extends layout

block content
  .container
    .row
      .col-md-4
        div(class=['panel', 'panel-default'])
          .panel-heading
            h3(class='panel-title') Signin
          .panel-body
            form(method="post", enctype="application/x-www-form-urlencoded")
              div(class=['form-group', form.username.hasErrors() ? 'has-error':''])
                label(for='email', class='control-label') Username
                input(type='email', class='form-control', placeholder='#{form.username.placeholder}', name="username", value='#{form.username.value}')
                if form.username.hasErrors()
                  each error in form.username.errors
                    span(class='help-block') #{error.message}
              div(class=['form-group', form.password.hasErrors() ? 'has-error':''])
                label(for='password') Password
                input(type='password', class='form-control', placeholder='#{form.password.placeholder}', name="password", value='#{form.password.value}')
                each error in form.password.errors
                  span(class='help-block') #{error.message}
              button(type='submit', class=['btn', 'btn-primary']) Signin
              a(href="/", id="signup_link") Signup
              a(href="/forgot") forgot?

安装

$ npm install validationjs

Get dev version from git repository

$ git clone https://github.com/imcj/validationjs

自定义约束

validationjs并不能提供所有的规则,所以你需要编写自己的约束来定义这些规则,比如usernameUnique, 我们想要限定用户的名称必需是唯一的,然而每一个用户系统都有差别,限制用户名在系统中是唯一的这个 规则不是每一个应用都一样,所以validationjs不能提供这种规则,这时我们就需要定义自己的约束。

constraint(callback_function(fieldName, fieldLabel, data) {
    return ["has error"]
})

我们可以使用constraint(callback_function)方法定义约束,callback_function是一个自定义的回调 方法,我们在这个方法内编写自己的规则代码,这个方法接受三个参数:

  • fieldName String类型,字段的名称,在请求的数据中作为键
  • fieldLabel String类型,字段的Label
  • data Object类型,请求的数据,data[fieldName]拿到当前字段的值

callback_function 返回一个数组,数组有两种类型的项,StringFieldErrorString 类型的返回值会转换成FieldErrorconstraint构造一个FieldError,并把String作为 FieldError对象的message属性。

constraint(callback_function(fieldName, fieldLabel, data) {
    return [new FieldError("field", "Field", "error")]
})

可用的验证规则

验证规则有常见的数据类型,如array, string,也有限定数据必需存在的required,还有描述更复杂的类型如email

array

字段必需是数组

required

字段是必需项

string

字段类型是字符串类型

integer

字段类型是整型

numeric

字段类型是数字

alpha

字段类型是A-Z的英文字符

alphaNumeric

字段是A-Z0-9的字符

alphaNumericSpace

字段是A-Z 0-9 还包含空格的字符

alphaDash

字段是a-z 0-9 -_ 的字符类型

boolean

字段是布尔类型

between

between类型输入min和max两个参数 例如:between(1, 5),可以校验的字段类型有字符串、数字和文件

true

必需是true

false

必需是false

yes

和true一样

no

和false一样

greater

字段值必需大于输入的参数 例如:greater(1)

greaterThan

字段值必需大于等于输入的参数 例如:greaterThan(1)

less

字段值必需小于输入的参数 例:less(1)

lessThan

字段值必需小于等于输入的参数 例:lessThan(1)

decimal

定义小数类型,参数为限定小数的长度 例:decimal(2)

json

字段是JSON类型

in

字段的值必需在参数类型为数组的参数中也存在 例:in('Male', 'Female')

notIn

字段的值必需在参数类型为数组的参数中不存在 例:notIn(18, 19, 20)

digits

字段的值长度

confirmed

对比两个字段的值是否相等,不相等则提示错误

validation("SigninForm")
    .field("password")
    .field("passwordAgagin")
        .confirmed(password)

different

对比两个字段的值是否相等,相等则提示错误 different(field)

email

定义一个内容格式为email类型的字段

max

最大值不能超过指定的数值,可用来限定数字和字符串类型的字段长度

min

最小值不能超过指定的数值,可用来限定数字和字符串类型的字段长度

ip

字段的内容限定为IP v4地址

regex

字段的值必需满足正则表达式的规则

url

字段的内容限定为URL

validationjs's People

Contributors

imcj avatar

Watchers

 avatar  avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.