react-form-validator-component
Version:
React Form Validator exposes a single React component which uses the render prop pattern to validate the input on its child form. It is built as a pure React component, with no additional dependencies, making it efficient and cheap to add to any React
164 lines (146 loc) • 4.03 kB
JavaScript
const emailRegex = /^(([^<>()[\]\\.,;:\s@"]+(\.[^<>()[\]\\.,;:\s@"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/
const emailArrayRegex = /^(.{1,})@(.{2,})/
const nameRegex = /^[a-zA-Z]+(([',. -][a-zA-Z ])?[a-zA-Z]*)*$/
const phoneNumberRegex = /^[+]?(\d{1,3})\s?(\d{10})$/
const postCodeRegex = /^(([A-Za-z0-9]{2,4})\s?([A-Za-z0-9]{1,5})?)?$/
const sortCodeRegex = /^(\d{2}(\s|[-])\d{2}(\s|[-])\d{2}$)|\d{6}|^$/
const swiftCodeRegex = /^((([A-Za-z]{6}[0-9A-Za-z]{2})|([A-Za-z]{4}(\s|-)?[A-Za-z]{2}(\s|-)?[0-9A-Za-z]{2}))[0-9A-Za-z]{3}?$)|^$/
const ibanRegex = /^([0-9A-Za-z]{4}\s?){4,6}([0-9A-Za-z]{1,4}|[0-9A-Za-z]{4}\s?[0-9A-Za-z]{1|4})?$/
const vatNumberRegex = /^\d{8,15}$/
const alphaNumericRegex = /^[A-Z0-9a-z\-/\s]+$/i
const numericRegex = /^-?\d*[.]?\d+$/
const urlRegex = /^(http:\/\/www\.|https:\/\/www\.|http:\/\/|https:\/\/)?[a-z0-9]+([-.]{1}[a-z0-9]+)*\.[a-z]{2,5}(:[0-9]{1,5})?(\/.*)?$/g
const isRequired = {
validator: data => {
if ((Array.isArray(data) && data.length > 0) || data === false || (data && !Array.isArray(data))) return true
return false
},
error: 'Please provide a value.'
}
const isFullName = {
validator: data => {
if (data.match(nameRegex)) return true
return false
},
error: 'Please provide a full name'
}
const isEmail = {
validator: data => {
if (data === undefined) return false
if (data.match(emailRegex)) return true
return false
},
error: 'Please provide a valid email address'
}
const isEmailArray = {
validator: data => {
if (data.match(emailArrayRegex)) return true
return false
},
error: 'Please provide a valid email address, or several emails comma delimited'
}
const isPhoneNumber = {
validator: data => {
if (data.match(phoneNumberRegex)) return true
return false
},
error: 'Please provide a valid UK phone number'
}
const isPostCode = {
validator: data => {
if (data.match(postCodeRegex)) return true
return false
},
error: 'Please provide a valid UK postcode'
}
const isSortCode = {
validator: data => {
if (data.match(sortCodeRegex)) return true
return false
},
error: 'Please provide a UK Sort Code'
}
const isSwiftCode = {
validator: data => {
if (data.match(swiftCodeRegex)) return true
return false
},
error: 'Please provide a valid Swift Code'
}
const isIban = {
validator: data => {
if (data.match(ibanRegex)) return true
return false
},
error: 'Please provide a valid Swift Code'
}
const isVatNumber = {
validator: data => {
if (data.match(vatNumberRegex)) return true
return false
},
error: 'Please provide a valid UK VAT Number'
}
const isAlphaNumeric = {
validator: data => {
if (data.match(alphaNumericRegex)) return true
return false
},
error: 'Please provide an alphanumeric input'
}
const isNumeric = {
validator: data => {
if (typeof data === 'number') {
return true
}
if (data.match(numericRegex)) return true
return false
},
error: 'Please provide an numeric input'
}
const isUrl = {
validator: data => {
if (data.match(urlRegex)) return true
return false
},
error: 'Please provide a valid URL'
}
const isLength = {
validator: (data, length) => {
if (data.length === length) return true
return false
},
error: `Please provide an input of exactly ${length} characters`
}
const maxLength = {
validator: (data, length) => {
if (data.length <= length) return true
return false
},
error: `The maximum length of this input is ${length} characters`
}
const minLength = {
validator: (data, length) => {
if (data.length >= length) return true
return false
},
error: `The minimum length of this input is ${length} characters`
}
export {
isRequired,
isEmail,
isEmailArray,
isFullName,
isPhoneNumber,
isPostCode,
isSortCode,
isSwiftCode,
isIban,
isVatNumber,
isAlphaNumeric,
isNumeric,
isUrl,
isLength,
maxLength,
minLength
}