npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

joi-persian-validators

v1.0.2

Published

A set of persian validations built for Joi object validator.

Downloads

4

Readme

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

| Validator | API | Extra rules | Description | |----------------|---------------|----------------------------------------------------------------|-------------------------------------------------------------------------------------------------------------------------| | 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.

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