Fork me on GitHub

A few words with Persian users of this library

تشخیص کلمات و حروف فارسی یک سایت کار ساده ای به نظر میاد. کافیه کلیه حروف فارسی رو از الف تا ی بنویسیم و از روش یک Regular Expression بسازیم. راستی همزه تنها یادتون نره. و آی کلاه دار. و همزه روی پایه، فکر کنم بد نباشه همزه روی الف رو هم بنویسیم. خوبه به نظر میاد همه چیز رو نوشتیم. اما یه مشکل دیگه! توی سیستم عامل ویندوز اعداد به صورت پیش فرض انگلیسی هستند ولی توی سیستم عامل مکینتاش اعداد به صورت فارسی تایپ میشن. حالا سیستم عامل هایی مثل ابونتو،‌ اندروید،‌ آی او اس و … رو هم بهش اضافه کنید. به نظر کار وقت گیری میاد. چند وقت پیش که روی تم یاب کار می کردم به مورد مشابهی برخورد کردم. اون موقع وقت زیادی از من گرفته شد تا تونستم این مشکل رو حل کنم. بعد از اون همه دردسر با علی آجودانیان صحبت کردم و هر دو تصمیم گرفتیم که نتیجه کارمون رو روی گیت هاب در اختیار همه برنامه نویس ها بگذاریم. این شد که کتابخانه PersianRex که مجموعه ای از Regular Expression ها برای تشخیص حروف فارسی در مرورگر و محیط جاوااسکریپت تحت سرور هست رو نوشتیم. نسخه اولیه این کتابخانه در تاریخ ۷ دی ۱۳۹۴ انتشار پیدا کرد. شما می تونید با استفاده از صفحه دموی این کتابخانه حروف کیبورد خودتون رو تست کنید. اگر حرفی پیدا کردید که در این کتابخانه وجود نداشت یک issue در همین ریپازیتوری برای ما باز کنید و حرف یا حروفی که به اشتباه فارسی تشخیص داده نشدند رو برای ما بفرستید(با ذکر یک نمونه کلمه فارسی یا عربی مورد استفاده در زبان فارسی شامل اون حرف) و ما در نسخه جدید این لایبرری اون رو خواهیم گنجوند و پروژه شما رو در لیست اسپانسر ها قرار خواهیم داد. شما مختارید که از این کتابخانه به هر شکلی که دوست دارید استفاده کنید و هر شکلی خواستید کد های این کتابخانه رو به فروش برسونید.

A simple playground:

The first box (left side), will detect all the characters that are allowed in Persian. The other box detects the characters that are only used in rtl languages. For instance this characters [] are allowed in Persian but they are not rtl characters, they are also used in languages like English. If you found any character that the boxes above can not recognize, please feel free to open up an issue on our repository.

Getting started

You can download the latest release from the releases page or use your preferred package manager.

via npm:
npm install persian-rex --save
via bower:
bower install persian-rex --save
Once downloaded you can include the dist file like this: <scirpt src="bower_components/persian-rex/dist/persian-rex.js"></script>
Or if you are using node: var persianRex = require('persian-rex');

Detecting Persian Numbers

The number RegExp will match any string that only contains Persian numbers. if (persianRex.number.test('۱۲۳')) makeInputsRTL();

Detecting Persian Letters

The letter RegExp will match any string that only contains Persian letters. if (persianRex.letter.test('ابپ')) makeInputsRTL();

Detecting Persian Text

The text RegExp will match any string that only contains Persian letters or Persian numbers. if (persianRex.text.test('ابپ۱۲۳')) doSomething();

Detecting RTL characters

From version 2 of this library, rtl RegExp is added to give you the ability to detect if tested string contains only rtl characters or not. rtl characters are Persian letters, Persian numbers and only the punctuations that are rtl (not [] or / that are also used in English). This is added so that you can be absolutely sure that you are dealing with a rtl text. Here is the example: if (persianRex.rtl.test('،')) doSomething(); if (persianRex.rtl.test('!')) doSomething(); //this line will not be executed

Punctuations

Since version 1.3.0 punctuations are added to the library and they are combined with the text method to create a more natural detection of Persian text. It's rare that anybody wants to test a string against Persian punctuation but we decided to expose is for our users. Here is how to use it: if (persianRex.punctuation.test('!()[]،؟«»؛')) doSomething();

Using has prefix

You can prefix any of the above methods with has. if (persianRex.hasNumber.test('ابپ۱۲۳۴۵۶123abc')) doSomething();

The if condition is true, because the string has a persian number in it. You can use hasLetter and hasText as well.

Lower level usage

You can also get the ASCI code ranges for Persian numbers and Persian letters to make your custom RegExps. var customLettersRegular = new RegExp('^' + persianRex.lettersASCIRange); var customNumberRegular = new RegExp('^' + persianRex.numbersASCIRange); var customNumberRegular = new RegExp('^' + persianRex.rtlPunctuationsASCIRange); var customNumberRegular = new RegExp('^' + persianRex.ltrPunctuationsASCIRange);

Sponsors

Many of the regular expressions in this project is extracted from larger projects such as Themeyab.com, If you think I'm are missing an important regular expression, feel free to open an issue on this repository and I will include it in the next version.