Lightweight, zero-dependency vanilla JavaScript form validation library inspired by jquery-validation.
- No dependency (pure JS)
- Modular rules – each rule lives in its own file under
src/rules/ - Built-in rules:
required,email,minlength,maxlength,pattern,equalTo,numeric,url,date,dateISO,etc - Extensible with custom rules via
addMethod - Build with Vite – outputs
js-validation.jsandjs-validation.min.js - Test with Vitest
npm install @phpdevsr/js-validation<!-- Latest version -->
<script src="https://cdn.jsdelivr.net/npm/@phpdevsr/js-validation/dist/js-validation.min.js"></script>
<!-- Specific version -->
<script src="https://cdn.jsdelivr.net/npm/@phpdevsr/js-validation@1.0.0/dist/js-validation.min.js"></script>
<!-- ES module -->
<script type="module">
import jsValidation from 'https://cdn.jsdelivr.net/npm/@phpdevsr/js-validation/dist/js-validation.esm.min.js';
</script>npm run buildProduces in dist/:
js-validation.js– UMD (unminified)js-validation.min.js– UMD (minified)js-validation.esm.js– ES module (unminified)js-validation.esm.min.js– ES module (minified)
npm testimport jsValidation from '@phpdevsr/js-validation';
const validator = jsValidation('#signup', {
rules: {
email: { required: true, email: true },
password: { required: true, minlength: 6 },
confirmPassword: { required: true, equalTo: '#password' }
},
messages: {
confirmPassword: { equalTo: 'Passwords must match.' }
}
}).submit((form) => {
// Only fires when all fields are valid
fetch('/api/signup', { method: 'POST', body: new FormData(form) });
});// Import core without any rules
import jsValidation from '@phpdevsr/js-validation/core';
// Then import only the specific rules you need
import '@phpdevsr/js-validation/rules/required';
import '@phpdevsr/js-validation/rules/email';
// Available rules: required, email, minlength, maxlength, pattern, equalTo, numeric, url, date, dateISO
const validator = jsValidation('#contact', {
rules: {
name: { required: true },
email: { required: true, email: true }
}
}).submit((form) => {
fetch('/api/contact', { method: 'POST', body: new FormData(form) });
});<script src="dist/js-validation.min.js"></script>
<script>
const validator = jsValidation.default('#signup', { /* rules */ });
</script>import jsValidation from 'js-validation';
jsValidation.addMethod('startsWithA', (value) => value.startsWith('A'), 'Must start with letter A.');We are accepting contributions from the community! It doesn't matter whether you can code, write documentation, or help find bugs, all contributions are welcome.
Please read the CONTRIBUTING.md.
This project has had thousands on contributions from people since its creation. This project would not be what it is without them.
Made with contrib.rocks.