vuelidate
Version:
Simple, lightweight model-based validation for Vue.js
31 lines (24 loc) • 602 B
JavaScript
import { req, withParams } from './common'
export default withParams({ type: 'ipAddress' }, (value) => {
if (!req(value)) {
return true
}
if (typeof value !== 'string') {
return false
}
const nibbles = value.split('.')
return nibbles.length === 4 && nibbles.every(nibbleValid)
})
const nibbleValid = (nibble) => {
if (nibble.length > 3 || nibble.length === 0) {
return false
}
if (nibble[0] === '0' && nibble !== '0') {
return false
}
if (!nibble.match(/^\d+$/)) {
return false
}
const numeric = +nibble | 0
return numeric >= 0 && numeric <= 255
}