Socket
Book a DemoInstallSign in
Socket

joi-persian-validators

Package Overview
Dependencies
Maintainers
1
Versions
3
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

joi-persian-validators

A set of persian validations built for Joi object validator.

1.0.2
latest
Source
npmnpm
Version published
Maintainers
1
Created
Source

Joi Persian Validators

A set of persion validations built on top of Joi object validator. This idea came to my mind when I had to rewrite the same validator over and over again. Feel free to open an issue to ask for more validation rules.

Demo

⚓️ Installation

Install the package using yarn or npm

npm i joi joi-persian-validators

// or

yarn add joi joi-persian-validators

📜 How to use it

This library is a set of extenstions of top of Joi validator, thus you can use it with react-hook-forms or formik. Feel free to take a look at examples. Using this lib is fairly simple, first you need to import the lib;

import joi from 'joi';
import persianJoi from 'joi-persian-validators';

then you have to add persian extenstions to your joi instance.

// Add custom validators to a single joi instance
const pJoi = joi.extend(...persianJoi);

// Then create your custom schema
const schema = pJoi.object({
  mobile: pJoi.mobile(),
  id: pJoi.idNumber()
});

// commonjs
const Joi = require('joi').extend(...require('joi-persian-validators'));

// Then create your custom schema
const schema = Joi.object({
  mobile: Joi.mobile(),
  id: Joi.idNumber()
});

Example

To see how it works with react-hook-forms see this Example

import joi from 'joi';
import extensions from 'joi-persian-validators';

const phoneNumber = '09123334433';
// Also you can use persian characters, the value will be returned with english characters
const testId = '۴۳۱۱۰۲۰۴۶۵';

const pJoi = joi.extend(...extensions);

const schema = custom.object({
  phone: pJoi.phone(),
  id: pJoi.idNumber(),
});

const { value } = schema.validate({ phone: phoneNumber, id: testId });
// value = { phone: '09123334433', id: '4311020465' }

📃 Validators

ValidatorAPIExtra rulesDescription
Mobile.mobile().irancell(), mci(), rightel(), .with({ operator: true })Validate a mobile phone number. Additional rules lets you to force the user to enter the desired operator phone number.
NationalID.idNumber()Validate Iranian national id number.

.with({ operator: true }) will return the phone number with the operator but .irancell(), .mci(), .rightel() will force the user to enter a number with the given rule.

💬 Displaying custom messages

const schema = pJoi.object({
  phone: pJoi.mobile().messages({
    'mobile.base': 'شماره ای که وارد کردید اشتباه است',
    'mobile.irancell': 'شماره ای که وارد کردید حتما باید ایرانسل باشد',
    'mobile.characters': 'طول شماره وارد شده باید دقیقا ۱۱ باشد',
  }),
  id: pJoi.idNumber(),
});

/*
  Valid Data
*/
const phoneNumber = '09332221122';
const id = '۴۳۱۱۰۲۰۴۶۵';

const { value } = schema.validate({ phone: phoneNumber, id });

// value = 
// { phone: '09332221122', id: '4311020465' }

/*
  Invalid Data
*/
const phoneNumber = '00332221122';
const id = '۴۳۱۱۰۲۰۴۶۵';

const { value, error } = schema.validate({ phone: phoneNumber, id });

// error =
/* 
{ phone: '00332221122', id: '۴۳۱۱۰۲۰۴۶۵' } [Error [ValidationError]: شماره ای که وارد کردید اشتباه است] {
  _original: { phone: '00332221122', id: '۴۳۱۱۰۲۰۴۶۵' },
  details: [
    {
      message: 'شماره ای که وارد کردید اشتباه است',
      path: [Array],
      type: 'mobile.base',
      context: [Object]
    }
  ]
}
*/

🎯 TODOS

Please feel free to create an issue to suggest new validators or new features.

  • Add mobile number validator
  • Add Iranian national ID validators
  • Get phone operator
  • Add phone number validator
  • Add birthday validator (Maybe?)
  • Add bank account validators
  • Add postal code validators

FAQs

Package last updated on 11 May 2022

Did you know?

Socket

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Install

Related posts

SocketSocket SOC 2 Logo

Product

About

Packages

Stay in touch

Get open source security insights delivered straight into your inbox.

  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc

U.S. Patent No. 12,346,443 & 12,314,394. Other pending.