Skip to content
An anthology of a variety of tools for Persian language in javascript
Branch: master
Clone or download
Permalink
Type Name Latest commit message Commit time
Failed to load latest commit information.
dist update: write version in all files Sep 4, 2018
scripts update: write version in all files Sep 4, 2018
src fix: load functions in browser without tools (issue:#2) Sep 4, 2018
test update: README.md and minor stability improvements Jun 18, 2018
.babelrc
.eslintignore add: first version Jun 18, 2018
.eslintrc chore: eslint and rollup modules config Jun 18, 2018
.gitignore update: general fixes and stability improvements. Jun 18, 2018
.npmignore add: first version Jun 18, 2018
.travis.yml chore: node versions in the travis.yml file Jun 18, 2018
CHANGELOG.md chore(release): 0.0.5 Sep 4, 2018
LICENSE add: first version Jun 18, 2018
README.md
package.json chore(release): 0.0.5 Sep 4, 2018
yarn.lock add: first version Jun 18, 2018

README.md

Persian tools

Build Status

PersianTools.js is a standalone, library-agnostic JavaScript that enables some of the Persian features for using in the JavaScript.

Features

  • 🔥 Convert Persian words to the number and vice versa.
  • 🔥 Add and remove commas to numbers.
  • 🔥 Convert Persian numbers to Arabic or English numbers and vice versa.
  • 🔥 Validation of Iranian National Number(code-e Melli).
  • 🔥 Get the city and province name by national code.
  • 🔥 Bank number validation.
  • 🔥 Get the name of the bank by bank account number.
  • 🔥 Validation of the correctness of the text of the Persian language and clear the Arabic letters in the Persian text.
  • 🔥 Fix Persian characters in URL.

Getting started

There are two main ways to get PersianTools.js in your JavaScript project: via script tags or by installing it from NPM and using a build tool like Parcel, WebPack, or Rollup.

via Script Tag

Add the following code to an HTML file:

<html>
  <head>
    <!-- Load PersianTools.js -->
    <script src="https://cdn.jsdelivr.net/npm/persian-tools"> </script>

    <!-- Place your code in the script tag below. You can also use an external .js file -->
    <script type="text/javascript">
      // Notice there is no 'import' statement. 'all persian-tools functions like digitsEnToFa, etc...' is available on the index-page
      // because of the script tag above.

      // Takes a string made of English digits only, and returns a string that represents the same number but with Persian digits
      var convertToFa = digitsEnToFa(1234567);

      // etc...
    </script>
  </head>

  <body>
  </body>
</html>

Open up that html file in your browser and the code should run!

via NPM

Add PersianTools.js to your project using yarn or npm. Note: Because we use ES2017 syntax (such as import), this workflow assumes you are using a modern browser or a bundler/transpiler to convert your code to something older browsers understand.

import * as persianTools from "persian-tools";
// or
import { digitsEnToFa } from "persian-tools";

// Takes a string made of English digits only, and returns a string that represents the same number but with Persian digits
var convertToFa = persianTools.digitsEnToFa(1234567);

Usage

Let's take a look at what an example test case would look like using Persian-tools.

Convert Persian words to the number and vice versa

import { NumberToWords, WordsToNumber } from "persian-tools";

describe("Words and numbers", () => {
	it("WordsToNumber", () => {
		let wordFn = new WordsToNumber();

		expect(
			wordFn.convert("منفی سه هزارمین", { digits: "fa", addCommas: true })
		).toEqual("-۳,۰۰۰");
		expect(wordFn.convert("منفی سه هزارمین", { digits: "fa" })).toEqual(
			"-۳۰۰۰"
		);
		expect(wordFn.convert("منفی سه هزارمین")).toEqual(-3000);
		expect(wordFn.convert("منفی سه هزارم")).toEqual(-3000);
		expect(wordFn.convert("منفی سه هزار")).toEqual(-3000);
		expect(wordFn.convert("سه هزار دویست و دوازده")).toEqual(3212);
		expect(wordFn.convert("منفی سه هزارمین")).not.toEqual("-3000");
		expect(String(wordFn.convert("منفی سه هزارمین"))).toHaveLength(5);

		expect(wordFn.convert("دوازده هزار بیست دو")).toEqual(12022);
		expect(
			wordFn.convert("دوازده هزار بیست دو", { addCommas: true })
		).toEqual("12,022");
	});

	it("NumberToWords", () => {
		expect(NumberToWords(500443)).toEqual(
			"پانصد هزار و چهار صد و چهل و سه"
		);
		expect(NumberToWords("500,443")).toEqual(
			"پانصد هزار و چهار صد و چهل و سه"
		);
		expect(NumberToWords(500)).toHaveLength(5);
		expect(NumberToWords(30000000000)).toEqual("سی میلیارد");
	});
});

Add and remove commas

import { addCommas, removeCommas } from "persian-tools";

it("Add and remove commas", () => {
	expect(addCommas(30000000)).toEqual("30,000,000");
	expect(addCommas(300)).toEqual("300");
	expect(addCommas(3000)).toBeType("string");
	expect(addCommas()).toBeUndefined();

	expect(removeCommas("30,000,000")).toEqual(30000000);
	expect(removeCommas(300)).toEqual(300);
	expect(removeCommas("300")).toEqual(300);
	expect(removeCommas("3000")).toBeType("number");
	expect(removeCommas()).toBeUndefined();
});

Convert Persian numbers to Arabic or English numbers and vice versa

import {
	digitsArToFa,
	digitsArToEn,
	digitsEnToFa,
	digitsFaToEn
} from "persian-tools";

describe("Convert numbers", () => {
	it("digitsArToFa", () => {
		expect(digitsArToFa("٠١٢٣٤٥٦٧٨٩")).toEqual("۰۱۲۳۴۵۶۷۸۹");
		expect(digitsArToFa("۸۹123۴۵")).toEqual("۸۹123۴۵");
		expect(digitsArToFa(456128)).toEqual("456128");
		expect(digitsArToFa()).toBeUndefined();
		expect(digitsArToFa("")).toBeUndefined();
		expect(digitsArToFa("Text ٠١٢٣٤٥٦٧٨٩")).toEqual("Text ۰۱۲۳۴۵۶۷۸۹");
	});

	it("digitsArToEn", () => {
		expect(digitsArToEn("٠١٢٣٤٥٦٧٨٩")).toEqual("0123456789");
		expect(digitsArToEn("٨٩123٤٥")).toEqual("8912345");
		expect(digitsArToEn(456128)).toEqual("456128");

		expect(digitsArToEn()).toBeUndefined();
		expect(digitsArToEn("")).toBeUndefined();

		expect(digitsArToEn("Text ٠١٢٣٤٥٦٧٨٩")).toEqual("Text 0123456789");
	});

	it("digitsEnToFa", () => {
		expect(digitsEnToFa("123۴۵۶")).toEqual("۱۲۳۴۵۶");
		expect(digitsEnToFa("٤٥٦")).toEqual("٤٥٦");
		expect(digitsEnToFa("123۴۵۶")).toEqual("۱۲۳۴۵۶");
		expect(digitsEnToFa()).toBeUndefined();
		expect(digitsEnToFa("")).toBeUndefined();
	});

	it("digitsFaToEn", () => {
		expect(digitsFaToEn("123۴۵۶")).toEqual("123456");
		expect(digitsFaToEn("۸۹123۴۵")).toEqual("8912345");
		expect(digitsFaToEn("۰۱۲۳۴۵۶۷۸۹")).toEqual("0123456789");
		expect(digitsFaToEn()).toBeUndefined();
		expect(digitsFaToEn("")).toBeUndefined();
	});
});

Validation of Iranian National Number(code-e Melli) and get the city and province name by that.

import {
	verifyIranianNationalId,
	getPlaceByIranNationalId
} from "persian-tools";

describe("National id", () => {
	it("Validate", () => {
		expect(verifyIranianNationalId("0499370899")).not.toBeFalsy();
		expect(verifyIranianNationalId("0790419904")).not.toBeFalsy();
		expect(verifyIranianNationalId("0084575948")).not.toBeFalsy();
		expect(verifyIranianNationalId("0963695398")).not.toBeFalsy();
		expect(verifyIranianNationalId("0684159414")).not.toBeFalsy();
		expect(verifyIranianNationalId("0067749828")).not.toBeFalsy();

		expect(verifyIranianNationalId("0684159415")).toBeFalsy();

		expect(verifyIranianNationalId()).toBeUndefined();
	});

	it("City and province name", () => {
		expect(getPlaceByIranNationalId("0499370899").city).toEqual("شهرری");
		expect(getPlaceByIranNationalId("0790419904").city).toEqual("سبزوار");
		expect(getPlaceByIranNationalId("0084575948").city).toEqual(
			"تهران مرکزی"
		);
		expect(getPlaceByIranNationalId("0060495219").city).toEqual(
			"تهران مرکزی"
		);
		expect(getPlaceByIranNationalId("0671658506").city).toEqual("بجنورد");
		expect(getPlaceByIranNationalId("0671658506").city).toEqual("بجنورد");
		expect(getPlaceByIranNationalId("0643005846").city).toEqual("بیرجند");
		expect(getPlaceByIranNationalId("0906582709").city).toEqual("کاشمر");
		expect(getPlaceByIranNationalId("0451727304").city).toEqual("شمیران");
		expect(getPlaceByIranNationalId("0371359058").city).toEqual("قم");

		expect(getPlaceByIranNationalId("0084545943").city).toEqual(
			"تهران مرکزی"
		);

		expect(getPlaceByIranNationalId()).toBeUndefined();
	});
});

Bank number validation and get the name of the bank by bank account number

import {
	verifyIranianNationalId,
	getPlaceByIranNationalId
} from "persian-tools";

describe("National id", () => {
	it("Validation", () => {
		expect(verifyCardNumber(6037701689095443)).not.toBeFalsy();
		expect(verifyCardNumber(6219861034529007)).not.toBeFalsy();
		expect(verifyCardNumber(6219861034529008)).toBeFalsy();
	});

	it("Name of the bank", () => {
		expect(getBankNameFromCardNumber(6037701689095443)).toEqual(
			"بانک کشاورزی"
		);
		expect(getBankNameFromCardNumber(6219861034529007)).toEqual(
			"بانک سامان"
		);
		expect(getBankNameFromCardNumber("6219861034529007")).toEqual(
			"بانک سامان"
		);

		expect(getBankNameFromCardNumber()).toBeUndefined();
	});
});

Validation of the correctness of the text of the Persian language and clear the Arabic letters in the Persian text.

import { isPersian, toPersianChars } from "persian-tools";

describe("National id", () => {
	it("isPersian", () => {
		expect(isPersian("این یک متن فارسی است؟")).not.toBeFalsy();
		expect(isPersian("Lorem Ipsum Test")).toBeFalsy();

		expect(isPersian()).toBeUndefined();
	});

	it("toPersianChars", () => {
		expect(toPersianChars("علي")).toEqual("علی");

		expect(toPersianChars()).toBeUndefined();
	});
});

Fix Persian characters in URL.

import { isPersian, toPersianChars } from "persian-tools";

describe("Persian characters", () => {
	it("URLfix", () => {
		expect(
			URLfix(
				"https://fa.wikipedia.org/wiki/%D9%85%D8%AF%DB%8C%D8%A7%D9%88%DB%8C%DA%A9%DB%8C:Gadget-Extra-Editbuttons-botworks.js"
			)
		).toEqual(
			"https://fa.wikipedia.org/wiki/مدیاویکی:Gadget-Extra-Editbuttons-botworks.js"
		);
		expect(
			URLfix("https://en.wikipedia.org/wiki/Persian_alphabet")
		).toEqual("https://en.wikipedia.org/wiki/Persian_alphabet");
		expect(URLfix("Sample Text")).toEqual("Sample Text");
		expect(URLfix()).toBeUndefined();
	});
});
You can’t perform that action at this time.