persian-number-input 4.0.8 → 4.0.9
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +389 -389
- package/dist/components/PersianNumberInput.d.ts +4 -12
- package/dist/components/PersianNumberInput.d.ts.map +1 -1
- package/dist/components/PersianNumberInput.js +9 -26
- package/dist/components/PersianNumberInput.js.map +1 -1
- package/dist/hooks/usePersianNumberInput.d.ts +9 -8
- package/dist/hooks/usePersianNumberInput.d.ts.map +1 -1
- package/dist/hooks/usePersianNumberInput.js +70 -94
- package/dist/hooks/usePersianNumberInput.js.map +1 -1
- package/dist/utils/digitUtils.d.ts +6 -32
- package/dist/utils/digitUtils.d.ts.map +1 -1
- package/dist/utils/digitUtils.js +65 -162
- package/dist/utils/digitUtils.js.map +1 -1
- package/dist/utils/transformNumber.d.ts +2 -11
- package/dist/utils/transformNumber.d.ts.map +1 -1
- package/dist/utils/transformNumber.js +16 -81
- package/dist/utils/transformNumber.js.map +1 -1
- package/package.json +48 -52
package/README.md
CHANGED
|
@@ -1,389 +1,389 @@
|
|
|
1
|
-
# Persian Number Input
|
|
2
|
-
|
|
3
|
-
🌟 **React Persian Number Input Component**
|
|
4
|
-
|
|
5
|
-
---
|
|
6
|
-
|
|
7
|
-
English 🇺🇸 | فارسی 🇮🇷
|
|
8
|
-
|
|
9
|
-
---
|
|
10
|
-
|
|
11
|
-
## English
|
|
12
|
-
|
|
13
|
-
**Persian Number Input** - A powerful React component and utility for formatting and handling numbers in Persian, English, or other localized digit systems. Perfect for multilingual applications requiring numeric inputs with customizable formatting, including decimal support.
|
|
14
|
-
|
|
15
|
-
✅ **Key Features:**
|
|
16
|
-
|
|
17
|
-
- Supports Persian, English, and other digit localization (e.g., Indic)
|
|
18
|
-
- Customizable digit grouping (e.g., thousands separator)
|
|
19
|
-
- Handles decimal numbers with configurable precision using ``
|
|
20
|
-
- Min/max value constraints for input validation, including decimals
|
|
21
|
-
- Converts localized digits to standard English digits for processing
|
|
22
|
-
- Lightweight and compatible with React 16 to 19
|
|
23
|
-
- TypeScript support for robust development
|
|
24
|
-
|
|
25
|
-
### 🚀 Installation
|
|
26
|
-
|
|
27
|
-
Install the package via npm or yarn:
|
|
28
|
-
|
|
29
|
-
```bash
|
|
30
|
-
npm install persian-number-input
|
|
31
|
-
```
|
|
32
|
-
|
|
33
|
-
### 💻 Usage Examples
|
|
34
|
-
|
|
35
|
-
#### 1. Using `PersianNumberInput` Component
|
|
36
|
-
|
|
37
|
-
This component is ideal for form inputs requiring localized number formatting.
|
|
38
|
-
|
|
39
|
-
```jsx
|
|
40
|
-
import React, { useState } from "react";
|
|
41
|
-
import { PersianNumberInput } from "persian-number-input";
|
|
42
|
-
|
|
43
|
-
const App = () => {
|
|
44
|
-
const [number, setNumber] = useState("");
|
|
45
|
-
|
|
46
|
-
return (
|
|
47
|
-
<PersianNumberInput
|
|
48
|
-
initialValue="123456.78"
|
|
49
|
-
separatorCount={3}
|
|
50
|
-
separatorChar=","
|
|
51
|
-
locale="fa"
|
|
52
|
-
maxDecimals={2}
|
|
53
|
-
min={0.5}
|
|
54
|
-
max={1000000.999}
|
|
55
|
-
showZero={true}
|
|
56
|
-
onValueChange={(val) => setNumber(val || "")}
|
|
57
|
-
placeholder="Enter a number"
|
|
58
|
-
className="numeric-input"
|
|
59
|
-
/>
|
|
60
|
-
);
|
|
61
|
-
};
|
|
62
|
-
|
|
63
|
-
export default App;
|
|
64
|
-
```
|
|
65
|
-
|
|
66
|
-
**Output**:
|
|
67
|
-
```
|
|
68
|
-
Input: 123456.78
|
|
69
|
-
Displayed Output: ۱۲۳,۴۵۶٫۷۸
|
|
70
|
-
English Output: 123456.78
|
|
71
|
-
```
|
|
72
|
-
|
|
73
|
-
#### 2. Using `usePersianNumberInput` Hook
|
|
74
|
-
|
|
75
|
-
The `usePersianNumberInput` hook provides fine-grained control for custom input handling.
|
|
76
|
-
|
|
77
|
-
```jsx
|
|
78
|
-
import React from "react";
|
|
79
|
-
import { usePersianNumberInput } from "persian-number-input";
|
|
80
|
-
|
|
81
|
-
const CustomInput = () => {
|
|
82
|
-
const { value, onChange, rawValue } = usePersianNumberInput({
|
|
83
|
-
initialValue: "5000.25",
|
|
84
|
-
separatorCount: 3,
|
|
85
|
-
separatorChar: ",",
|
|
86
|
-
locale: "fa",
|
|
87
|
-
maxDecimals: 2,
|
|
88
|
-
min: 0.5,
|
|
89
|
-
max: 10000.999,
|
|
90
|
-
showZero: true,
|
|
91
|
-
});
|
|
92
|
-
|
|
93
|
-
return (
|
|
94
|
-
<div>
|
|
95
|
-
<input
|
|
96
|
-
type="text"
|
|
97
|
-
inputMode="decimal"
|
|
98
|
-
value={value}
|
|
99
|
-
onChange={onChange}
|
|
100
|
-
placeholder="Enter a number"
|
|
101
|
-
/>
|
|
102
|
-
<p>Raw Value: {rawValue || "N/A"}</p>
|
|
103
|
-
</div>
|
|
104
|
-
);
|
|
105
|
-
};
|
|
106
|
-
|
|
107
|
-
export default CustomInput;
|
|
108
|
-
```
|
|
109
|
-
|
|
110
|
-
**Explanation**:
|
|
111
|
-
- The hook manages the input state and formatting, returning `value` (formatted for display) and `rawValue` (English digits).
|
|
112
|
-
- Use this for custom input components or non-standard form controls.
|
|
113
|
-
- **Output**:
|
|
114
|
-
```
|
|
115
|
-
Displayed Input:ავ۰٫۲۵
|
|
116
|
-
Raw Value: 5000.25
|
|
117
|
-
```
|
|
118
|
-
|
|
119
|
-
#### 3. Using `transformNumber` Utility
|
|
120
|
-
|
|
121
|
-
The `transformNumber` function formats numbers without requiring a React component, ideal for display-only scenarios.
|
|
122
|
-
|
|
123
|
-
```javascript
|
|
124
|
-
import { transformNumber } from "persian-number-input";
|
|
125
|
-
|
|
126
|
-
const number = 123456.789;
|
|
127
|
-
const formatted = transformNumber(number, {
|
|
128
|
-
separatorCount: 3,
|
|
129
|
-
separatorChar: ",",
|
|
130
|
-
locale: "fa",
|
|
131
|
-
maxDecimals: 2,
|
|
132
|
-
showZero: true,
|
|
133
|
-
});
|
|
134
|
-
|
|
135
|
-
console.log(formatted); // Output: ۱۲۳,۴۵۶٫۷۹
|
|
136
|
-
```
|
|
137
|
-
|
|
138
|
-
**Explanation**:
|
|
139
|
-
- Use `transformNumber` to format numbers for display in tables, labels, or other non-input contexts.
|
|
140
|
-
- Supports the same options as `PersianNumberInput` (`separatorCount`, `locale`, etc.).
|
|
141
|
-
- Returns a string with localized digits and formatting.
|
|
142
|
-
|
|
143
|
-
### 📚 Props Reference
|
|
144
|
-
|
|
145
|
-
| Name | Type | Default | Description |
|
|
146
|
-
| --- | --- | --- | --- |
|
|
147
|
-
| `initialValue` | `string | number` | `""` | Initial value of the input |
|
|
148
|
-
| `separatorCount` | `number` | `3` | Number of digits per group (e.g., 3 for thousands) |
|
|
149
|
-
| `separatorChar` | `string` | `","` | Character used for grouping digits (e.g., `,` or `.`) |
|
|
150
|
-
| `locale` | `string` | `"fa"` | Language for digit localization (e.g., `fa`, `en`) |
|
|
151
|
-
| `maxDecimals` | `number` | `0` | Maximum number of decimal places allowed |
|
|
152
|
-
| `showZero` | `boolean` | `false` | If `true`, displays `0` when the input is empty or zero |
|
|
153
|
-
| `min` | `number` | - | Minimum allowed value (supports decimals, e.g., `0.5`) |
|
|
154
|
-
| `max` | `number` | - | Maximum allowed value (supports decimals, e.g., `1000.201`) |
|
|
155
|
-
| `onValueChange` | `(value: string | undefined) => void` | - | Callback for value changes |
|
|
156
|
-
| `...rest` | `InputHTMLAttributes` | - | Standard HTML input attributes (e.g., `className`, `placeholder`, `style`) |
|
|
157
|
-
|
|
158
|
-
### 🌟 Why Use Persian Number Input?
|
|
159
|
-
|
|
160
|
-
- **Multilingual Support**: Seamlessly handle Persian, English, or other localized digits.
|
|
161
|
-
- **Customizable Formatting**: Control separators, decimals, and zero display.
|
|
162
|
-
- **Robust Validation**: Enforce min/max constraints with decimal precision using ``.
|
|
163
|
-
- **Developer-Friendly**: TypeScript support and a simple API for quick integration.
|
|
164
|
-
- **Lightweight**: Optimized for performance with minimal dependencies.
|
|
165
|
-
|
|
166
|
-
### ❓ FAQ (Frequently Asked Questions)
|
|
167
|
-
|
|
168
|
-
**Does this package support React 19?**
|
|
169
|
-
Yes, it is fully compatible with React 16 through 19.
|
|
170
|
-
|
|
171
|
-
**Can I use decimal numbers?**
|
|
172
|
-
Yes, set `maxDecimals` to the desired number of decimal places (e.g., `maxDecimals={2}`).
|
|
173
|
-
|
|
174
|
-
**How do I enforce minimum and maximum values?**
|
|
175
|
-
Use the `min` and `max` props, which support decimals (e.g., `min={0.5}`, `max={1000.201}`).
|
|
176
|
-
|
|
177
|
-
**How can I style the input?**
|
|
178
|
-
Pass `className` or `style` props to customize the input’s appearance.
|
|
179
|
-
|
|
180
|
-
**What happens if the user enters an invalid number?**
|
|
181
|
-
The component sanitizes inputs, ensuring only valid numbers are processed, and respects min/max constraints.
|
|
182
|
-
|
|
183
|
-
### 🌟 Support the Project
|
|
184
|
-
|
|
185
|
-
If you find this package useful, **please give it a star ⭐ on GitHub** to support further development.
|
|
186
|
-
|
|
187
|
-
👉 **[GitHub Repository](https://github.com/javadSharifi/persian-number-input)**
|
|
188
|
-
|
|
189
|
-
Thank you for your support! ❤️🚀
|
|
190
|
-
|
|
191
|
-
### 📈 SEO Keywords
|
|
192
|
-
|
|
193
|
-
`Persian Number Input`, `React Persian input`, `React number formatting`, `localized numeric input`, `Persian digits`, `React numeric input`, `number formatter`, `TypeScript React component`, `multilingual input`, `React number formatting hook`, `Persian number utility`
|
|
194
|
-
|
|
195
|
-
### 📄 License
|
|
196
|
-
|
|
197
|
-
MIT License
|
|
198
|
-
|
|
199
|
-
© 2025 Javad Sharifi. All rights reserved.
|
|
200
|
-
|
|
201
|
-
---
|
|
202
|
-
|
|
203
|
-
## فارسی
|
|
204
|
-
|
|
205
|
-
**کامپوننت ورودی اعداد فارسی** - یک کامپوننت و ابزار قدرتمند React برای مدیریت و فرمتبندی اعداد به صورت فارسی، انگلیسی یا سایر سیستمهای ارقام محلی. ایدهآل برای برنامههای چندزبانه که نیاز به ورودیهای عددی با فرمت سفارشی و پشتیبانی از اعشار دارند.
|
|
206
|
-
|
|
207
|
-
✅ **امکانات کلیدی:**
|
|
208
|
-
|
|
209
|
-
- پشتیبانی از ارقام فارسی، انگلیسی و سایر زبانها (مانند هندی)
|
|
210
|
-
- قابلیت تنظیم جداکننده ارقام (مثل هزارگان)
|
|
211
|
-
|
|
212
|
-
- اعمال محدودیتهای حداقل و حداکثر با پشتیبانی از اعشار
|
|
213
|
-
- تبدیل خودکار ارقام محلی به ارقام انگلیسی برای پردازش
|
|
214
|
-
- سبک و سازگار با React 16 تا 19
|
|
215
|
-
- پشتیبانی از TypeScript برای توسعه امن
|
|
216
|
-
|
|
217
|
-
### 🚀 نصب
|
|
218
|
-
|
|
219
|
-
پکیج را از طریق npm یا yarn نصب کنید:
|
|
220
|
-
|
|
221
|
-
```bash
|
|
222
|
-
npm install persian-number-input
|
|
223
|
-
```
|
|
224
|
-
|
|
225
|
-
### 💻 مثالهای استفاده
|
|
226
|
-
|
|
227
|
-
#### ۱. استفاده از کامپوننت `PersianNumberInput`
|
|
228
|
-
|
|
229
|
-
این کامپوننت برای ورودیهای فرم با فرمتبندی محلی مناسب است.
|
|
230
|
-
|
|
231
|
-
```jsx
|
|
232
|
-
import React, { useState } from "react";
|
|
233
|
-
import { PersianNumberInput } from "persian-number-input";
|
|
234
|
-
|
|
235
|
-
const App = () => {
|
|
236
|
-
const [number, setNumber] = useState("");
|
|
237
|
-
|
|
238
|
-
return (
|
|
239
|
-
<PersianNumberInput
|
|
240
|
-
initialValue="123456.78"
|
|
241
|
-
separatorCount={3}
|
|
242
|
-
separatorChar=","
|
|
243
|
-
locale="fa"
|
|
244
|
-
maxDecimals={2}
|
|
245
|
-
min={0.5}
|
|
246
|
-
max={1000000.999}
|
|
247
|
-
showZero={true}
|
|
248
|
-
onValueChange={(val) => setNumber(val || "")}
|
|
249
|
-
placeholder="یک عدد وارد کنید"
|
|
250
|
-
className="numeric-input"
|
|
251
|
-
/>
|
|
252
|
-
);
|
|
253
|
-
};
|
|
254
|
-
|
|
255
|
-
export default App;
|
|
256
|
-
```
|
|
257
|
-
|
|
258
|
-
**خروجی**:
|
|
259
|
-
```
|
|
260
|
-
ورودی: 123456.78
|
|
261
|
-
خروجی نمایشی: ۱۲۳,۴۵۶٫۷۸
|
|
262
|
-
خروجی انگلیسی: 123456.78
|
|
263
|
-
```
|
|
264
|
-
|
|
265
|
-
#### ۲. استفاده از هوک `usePersianNumberInput`
|
|
266
|
-
|
|
267
|
-
هوک `usePersianNumberInput` برای کنترل دقیق ورودیهای سفارشی استفاده میشود.
|
|
268
|
-
|
|
269
|
-
```jsx
|
|
270
|
-
import React from "react";
|
|
271
|
-
import { usePersianNumberInput } from "persian-number-input";
|
|
272
|
-
|
|
273
|
-
const CustomInput = () => {
|
|
274
|
-
const { value, onChange, rawValue } = usePersianNumberInput({
|
|
275
|
-
initialValue: "5000.25",
|
|
276
|
-
separatorCount: 3,
|
|
277
|
-
separatorChar: ",",
|
|
278
|
-
locale: "fa",
|
|
279
|
-
maxDecimals: 2,
|
|
280
|
-
min: 0.5,
|
|
281
|
-
max: 10000.999,
|
|
282
|
-
showZero: true,
|
|
283
|
-
});
|
|
284
|
-
|
|
285
|
-
return (
|
|
286
|
-
<div>
|
|
287
|
-
<input
|
|
288
|
-
type="text"
|
|
289
|
-
inputMode="decimal"
|
|
290
|
-
value={value}
|
|
291
|
-
onChange={onChange}
|
|
292
|
-
placeholder="یک عدد وارد کنید"
|
|
293
|
-
/>
|
|
294
|
-
<p>مقدار خام: {rawValue || "بدون مقدار"}</p>
|
|
295
|
-
</div>
|
|
296
|
-
);
|
|
297
|
-
};
|
|
298
|
-
|
|
299
|
-
export default CustomInput;
|
|
300
|
-
```
|
|
301
|
-
|
|
302
|
-
**توضیح**:
|
|
303
|
-
- این هوک وضعیت ورودی و فرمتبندی را مدیریت میکند و `value` (برای نمایش) و `rawValue` (ارقام انگلیسی) را برمیگرداند.
|
|
304
|
-
- برای کامپوننتهای ورودی سفارشی یا فرمهای غیراستاندارد مناسب است.
|
|
305
|
-
- **خروجی**:
|
|
306
|
-
```
|
|
307
|
-
ورودی نمایشی: ۵,۰۰۰٫۲۵
|
|
308
|
-
مقدار خام: 5000.25
|
|
309
|
-
```
|
|
310
|
-
|
|
311
|
-
#### ۳. استفاده از ابزار `transformNumber`
|
|
312
|
-
|
|
313
|
-
تابع `transformNumber` برای فرمتبندی اعداد بدون نیاز به کامپوننت React مناسب است.
|
|
314
|
-
|
|
315
|
-
```javascript
|
|
316
|
-
import { transformNumber } from "persian-number-input";
|
|
317
|
-
|
|
318
|
-
const number = 123456.789;
|
|
319
|
-
const formatted = transformNumber(number, {
|
|
320
|
-
separatorCount: 3,
|
|
321
|
-
separatorChar: ",",
|
|
322
|
-
locale: "fa",
|
|
323
|
-
maxDecimals: 2,
|
|
324
|
-
showZero: true,
|
|
325
|
-
});
|
|
326
|
-
|
|
327
|
-
console.log(formatted); // خروجی: ۱۲۳,۴۵۶٫۷۹
|
|
328
|
-
```
|
|
329
|
-
|
|
330
|
-
**توضیح**:
|
|
331
|
-
- از `transformNumber` برای فرمتبندی اعداد در جداول، برچسبها یا سایر موارد غیرورودی استفاده کنید.
|
|
332
|
-
- همان گزینههای `PersianNumberInput` (مانند `separatorCount` و `locale`) را پشتیبانی میکند.
|
|
333
|
-
- یک رشته با ارقام محلی و فرمتبندی مناسب برمیگرداند.
|
|
334
|
-
|
|
335
|
-
### 📚 مرجع مشخصات (Props)
|
|
336
|
-
|
|
337
|
-
| نام | نوع | پیشفرض | توضیح |
|
|
338
|
-
| --- | --- | --- | --- |
|
|
339
|
-
| `initialValue` | `string | number` | `""` | مقدار اولیه ورودی |
|
|
340
|
-
| `separatorCount` | `number` | `3` | تعداد ارقام در هر گروه (مثلاً ۳ برای هزارگان) |
|
|
341
|
-
| `separatorChar` | `string` | `","` | کاراکتر جداکننده گروهها (مثلاً `,` یا `.`) |
|
|
342
|
-
| `locale` | `string` | `"fa"` | زبان برای محلیسازی ارقام (مثلاً `fa` یا `en`) |
|
|
343
|
-
| `maxDecimals` | `number` | `0` | حداکثر تعداد ارقام اعشاری مجاز |
|
|
344
|
-
| `showZero` | `boolean` | `false` | اگر `true` باشد، عدد `0` را در ورودی خالی یا صفر نمایش میدهد |
|
|
345
|
-
| `min` | `number` | - | حداقل مقدار مجاز (پشتیبانی از اعشار، مثلاً `0.5`) |
|
|
346
|
-
| `max` | `number` | - | حداکثر مقدار مجاز (پشتیبانی از اعشار، مثلاً `1000.201`) |
|
|
347
|
-
| `onValueChange` | `(value: string | undefined) => void` | - | فراخوانی در تغییر مقدار |
|
|
348
|
-
| `...rest` | `InputHTMLAttributes` | - | ویژگیهای استاندارد ورودی HTML (مثل `className`، `placeholder`، `style`) |
|
|
349
|
-
|
|
350
|
-
### 🌟 چرا از این کامپوننت استفاده کنیم؟
|
|
351
|
-
|
|
352
|
-
- **پشتیبانی چندزبانه**: مدیریت آسان ارقام فارسی، انگلیسی یا سایر زبانها.
|
|
353
|
-
- **فرمتبندی انعطافپذیر**: کنترل جداکنندهها، اعشار و نمایش صفر.
|
|
354
|
-
- **اعتبارسنجی قوی**: اعمال محدودیتهای حداقل و حداکثر با دقت اعشاری با ``.
|
|
355
|
-
- **مناسب توسعهدهندگان**: پشتیبانی از TypeScript و API ساده برای ادغام سریع.
|
|
356
|
-
- **سبک و سریع**: بهینهشده برای عملکرد با حداقل وابستگیها.
|
|
357
|
-
|
|
358
|
-
### ❓ سوالات متداول
|
|
359
|
-
|
|
360
|
-
**آیا این پکیج از React 19 پشتیبانی میکند؟**
|
|
361
|
-
بله، کاملاً با React 16 تا 19 سازگار است.
|
|
362
|
-
|
|
363
|
-
**آیا میتوان از اعداد اعشاری استفاده کرد؟**
|
|
364
|
-
بله، با تنظیم `maxDecimals` میتوانید تعداد ارقام اعشاری را مشخص کنید (مثلاً `maxDecimals={2}`).
|
|
365
|
-
|
|
366
|
-
**چگونه میتوان حداقل و حداکثر مقدار را اعمال کرد؟**
|
|
367
|
-
از پراپهای `min` و `max` استفاده کنید که از اعشار پشتیبانی میکنند (مثلاً `min={0.5}` و `max={1000.201}`).
|
|
368
|
-
|
|
369
|
-
**چگونه ظاهر ورودی را سفارشی کنم؟**
|
|
370
|
-
با پراپهای `className` یا `style` میتوانید ظاهر ورودی را تغییر دهید.
|
|
371
|
-
|
|
372
|
-
**اگر کاربر عدد نامعتبری وارد کند چه میشود؟**
|
|
373
|
-
کامپوننت ورودیها را پاکسازی میکند و فقط اعداد معتبر را پردازش میکند، ضمن رعایت محدودیتهای min/max.
|
|
374
|
-
|
|
375
|
-
### 🌟 حمایت از پروژه
|
|
376
|
-
|
|
377
|
-
اگر این پکیج برای شما مفید بود، **لطفاً یک ستاره ⭐ به مخزن GitHub بدهید** تا توسعه بیشتر آن را تشویق کنید.
|
|
378
|
-
|
|
379
|
-
👉 **[مخزن GitHub](https://github.com/javadSharifi/persian-number-input)**
|
|
380
|
-
|
|
381
|
-
از حمایت شما سپاسگزاریم! ❤️🚀
|
|
382
|
-
|
|
383
|
-
### 📈 کلمات کلیدی برای جستجو
|
|
384
|
-
|
|
385
|
-
`ورودی اعداد فارسی`, `کامپوننت React فارسی`, `فرمتبندی اعداد در React`, `ورودی عددی محلیسازیشده`, `ارقام فارسی`, `ورودی عددی React`, `فرمتکننده اعداد`, `کامپوننت TypeScript React`, `ورودی چندزبانه`, `هوک فرمتبندی اعداد`, `ابزار اعداد فارسی`
|
|
386
|
-
|
|
387
|
-
### 📄 مجوز
|
|
388
|
-
|
|
389
|
-
MIT License
|
|
1
|
+
# Persian Number Input
|
|
2
|
+
|
|
3
|
+
🌟 **React Persian Number Input Component**
|
|
4
|
+
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
English 🇺🇸 | فارسی 🇮🇷
|
|
8
|
+
|
|
9
|
+
---
|
|
10
|
+
|
|
11
|
+
## English
|
|
12
|
+
|
|
13
|
+
**Persian Number Input** - A powerful React component and utility for formatting and handling numbers in Persian, English, or other localized digit systems. Perfect for multilingual applications requiring numeric inputs with customizable formatting, including decimal support.
|
|
14
|
+
|
|
15
|
+
✅ **Key Features:**
|
|
16
|
+
|
|
17
|
+
- Supports Persian, English, and other digit localization (e.g., Indic)
|
|
18
|
+
- Customizable digit grouping (e.g., thousands separator)
|
|
19
|
+
- Handles decimal numbers with configurable precision using ``
|
|
20
|
+
- Min/max value constraints for input validation, including decimals
|
|
21
|
+
- Converts localized digits to standard English digits for processing
|
|
22
|
+
- Lightweight and compatible with React 16 to 19
|
|
23
|
+
- TypeScript support for robust development
|
|
24
|
+
|
|
25
|
+
### 🚀 Installation
|
|
26
|
+
|
|
27
|
+
Install the package via npm or yarn:
|
|
28
|
+
|
|
29
|
+
```bash
|
|
30
|
+
npm install persian-number-input
|
|
31
|
+
```
|
|
32
|
+
|
|
33
|
+
### 💻 Usage Examples
|
|
34
|
+
|
|
35
|
+
#### 1. Using `PersianNumberInput` Component
|
|
36
|
+
|
|
37
|
+
This component is ideal for form inputs requiring localized number formatting.
|
|
38
|
+
|
|
39
|
+
```jsx
|
|
40
|
+
import React, { useState } from "react";
|
|
41
|
+
import { PersianNumberInput } from "persian-number-input";
|
|
42
|
+
|
|
43
|
+
const App = () => {
|
|
44
|
+
const [number, setNumber] = useState("");
|
|
45
|
+
|
|
46
|
+
return (
|
|
47
|
+
<PersianNumberInput
|
|
48
|
+
initialValue="123456.78"
|
|
49
|
+
separatorCount={3}
|
|
50
|
+
separatorChar=","
|
|
51
|
+
locale="fa"
|
|
52
|
+
maxDecimals={2}
|
|
53
|
+
min={0.5}
|
|
54
|
+
max={1000000.999}
|
|
55
|
+
showZero={true}
|
|
56
|
+
onValueChange={(val) => setNumber(val || "")}
|
|
57
|
+
placeholder="Enter a number"
|
|
58
|
+
className="numeric-input"
|
|
59
|
+
/>
|
|
60
|
+
);
|
|
61
|
+
};
|
|
62
|
+
|
|
63
|
+
export default App;
|
|
64
|
+
```
|
|
65
|
+
|
|
66
|
+
**Output**:
|
|
67
|
+
```
|
|
68
|
+
Input: 123456.78
|
|
69
|
+
Displayed Output: ۱۲۳,۴۵۶٫۷۸
|
|
70
|
+
English Output: 123456.78
|
|
71
|
+
```
|
|
72
|
+
|
|
73
|
+
#### 2. Using `usePersianNumberInput` Hook
|
|
74
|
+
|
|
75
|
+
The `usePersianNumberInput` hook provides fine-grained control for custom input handling.
|
|
76
|
+
|
|
77
|
+
```jsx
|
|
78
|
+
import React from "react";
|
|
79
|
+
import { usePersianNumberInput } from "persian-number-input";
|
|
80
|
+
|
|
81
|
+
const CustomInput = () => {
|
|
82
|
+
const { value, onChange, rawValue } = usePersianNumberInput({
|
|
83
|
+
initialValue: "5000.25",
|
|
84
|
+
separatorCount: 3,
|
|
85
|
+
separatorChar: ",",
|
|
86
|
+
locale: "fa",
|
|
87
|
+
maxDecimals: 2,
|
|
88
|
+
min: 0.5,
|
|
89
|
+
max: 10000.999,
|
|
90
|
+
showZero: true,
|
|
91
|
+
});
|
|
92
|
+
|
|
93
|
+
return (
|
|
94
|
+
<div>
|
|
95
|
+
<input
|
|
96
|
+
type="text"
|
|
97
|
+
inputMode="decimal"
|
|
98
|
+
value={value}
|
|
99
|
+
onChange={onChange}
|
|
100
|
+
placeholder="Enter a number"
|
|
101
|
+
/>
|
|
102
|
+
<p>Raw Value: {rawValue || "N/A"}</p>
|
|
103
|
+
</div>
|
|
104
|
+
);
|
|
105
|
+
};
|
|
106
|
+
|
|
107
|
+
export default CustomInput;
|
|
108
|
+
```
|
|
109
|
+
|
|
110
|
+
**Explanation**:
|
|
111
|
+
- The hook manages the input state and formatting, returning `value` (formatted for display) and `rawValue` (English digits).
|
|
112
|
+
- Use this for custom input components or non-standard form controls.
|
|
113
|
+
- **Output**:
|
|
114
|
+
```
|
|
115
|
+
Displayed Input:ავ۰٫۲۵
|
|
116
|
+
Raw Value: 5000.25
|
|
117
|
+
```
|
|
118
|
+
|
|
119
|
+
#### 3. Using `transformNumber` Utility
|
|
120
|
+
|
|
121
|
+
The `transformNumber` function formats numbers without requiring a React component, ideal for display-only scenarios.
|
|
122
|
+
|
|
123
|
+
```javascript
|
|
124
|
+
import { transformNumber } from "persian-number-input";
|
|
125
|
+
|
|
126
|
+
const number = 123456.789;
|
|
127
|
+
const formatted = transformNumber(number, {
|
|
128
|
+
separatorCount: 3,
|
|
129
|
+
separatorChar: ",",
|
|
130
|
+
locale: "fa",
|
|
131
|
+
maxDecimals: 2,
|
|
132
|
+
showZero: true,
|
|
133
|
+
});
|
|
134
|
+
|
|
135
|
+
console.log(formatted); // Output: ۱۲۳,۴۵۶٫۷۹
|
|
136
|
+
```
|
|
137
|
+
|
|
138
|
+
**Explanation**:
|
|
139
|
+
- Use `transformNumber` to format numbers for display in tables, labels, or other non-input contexts.
|
|
140
|
+
- Supports the same options as `PersianNumberInput` (`separatorCount`, `locale`, etc.).
|
|
141
|
+
- Returns a string with localized digits and formatting.
|
|
142
|
+
|
|
143
|
+
### 📚 Props Reference
|
|
144
|
+
|
|
145
|
+
| Name | Type | Default | Description |
|
|
146
|
+
| --- | --- | --- | --- |
|
|
147
|
+
| `initialValue` | `string | number` | `""` | Initial value of the input |
|
|
148
|
+
| `separatorCount` | `number` | `3` | Number of digits per group (e.g., 3 for thousands) |
|
|
149
|
+
| `separatorChar` | `string` | `","` | Character used for grouping digits (e.g., `,` or `.`) |
|
|
150
|
+
| `locale` | `string` | `"fa"` | Language for digit localization (e.g., `fa`, `en`) |
|
|
151
|
+
| `maxDecimals` | `number` | `0` | Maximum number of decimal places allowed |
|
|
152
|
+
| `showZero` | `boolean` | `false` | If `true`, displays `0` when the input is empty or zero |
|
|
153
|
+
| `min` | `number` | - | Minimum allowed value (supports decimals, e.g., `0.5`) |
|
|
154
|
+
| `max` | `number` | - | Maximum allowed value (supports decimals, e.g., `1000.201`) |
|
|
155
|
+
| `onValueChange` | `(value: string | undefined) => void` | - | Callback for value changes |
|
|
156
|
+
| `...rest` | `InputHTMLAttributes` | - | Standard HTML input attributes (e.g., `className`, `placeholder`, `style`) |
|
|
157
|
+
|
|
158
|
+
### 🌟 Why Use Persian Number Input?
|
|
159
|
+
|
|
160
|
+
- **Multilingual Support**: Seamlessly handle Persian, English, or other localized digits.
|
|
161
|
+
- **Customizable Formatting**: Control separators, decimals, and zero display.
|
|
162
|
+
- **Robust Validation**: Enforce min/max constraints with decimal precision using ``.
|
|
163
|
+
- **Developer-Friendly**: TypeScript support and a simple API for quick integration.
|
|
164
|
+
- **Lightweight**: Optimized for performance with minimal dependencies.
|
|
165
|
+
|
|
166
|
+
### ❓ FAQ (Frequently Asked Questions)
|
|
167
|
+
|
|
168
|
+
**Does this package support React 19?**
|
|
169
|
+
Yes, it is fully compatible with React 16 through 19.
|
|
170
|
+
|
|
171
|
+
**Can I use decimal numbers?**
|
|
172
|
+
Yes, set `maxDecimals` to the desired number of decimal places (e.g., `maxDecimals={2}`).
|
|
173
|
+
|
|
174
|
+
**How do I enforce minimum and maximum values?**
|
|
175
|
+
Use the `min` and `max` props, which support decimals (e.g., `min={0.5}`, `max={1000.201}`).
|
|
176
|
+
|
|
177
|
+
**How can I style the input?**
|
|
178
|
+
Pass `className` or `style` props to customize the input’s appearance.
|
|
179
|
+
|
|
180
|
+
**What happens if the user enters an invalid number?**
|
|
181
|
+
The component sanitizes inputs, ensuring only valid numbers are processed, and respects min/max constraints.
|
|
182
|
+
|
|
183
|
+
### 🌟 Support the Project
|
|
184
|
+
|
|
185
|
+
If you find this package useful, **please give it a star ⭐ on GitHub** to support further development.
|
|
186
|
+
|
|
187
|
+
👉 **[GitHub Repository](https://github.com/javadSharifi/persian-number-input)**
|
|
188
|
+
|
|
189
|
+
Thank you for your support! ❤️🚀
|
|
190
|
+
|
|
191
|
+
### 📈 SEO Keywords
|
|
192
|
+
|
|
193
|
+
`Persian Number Input`, `React Persian input`, `React number formatting`, `localized numeric input`, `Persian digits`, `React numeric input`, `number formatter`, `TypeScript React component`, `multilingual input`, `React number formatting hook`, `Persian number utility`
|
|
194
|
+
|
|
195
|
+
### 📄 License
|
|
196
|
+
|
|
197
|
+
MIT License
|
|
198
|
+
|
|
199
|
+
© 2025 Javad Sharifi. All rights reserved.
|
|
200
|
+
|
|
201
|
+
---
|
|
202
|
+
|
|
203
|
+
## فارسی
|
|
204
|
+
|
|
205
|
+
**کامپوننت ورودی اعداد فارسی** - یک کامپوننت و ابزار قدرتمند React برای مدیریت و فرمتبندی اعداد به صورت فارسی، انگلیسی یا سایر سیستمهای ارقام محلی. ایدهآل برای برنامههای چندزبانه که نیاز به ورودیهای عددی با فرمت سفارشی و پشتیبانی از اعشار دارند.
|
|
206
|
+
|
|
207
|
+
✅ **امکانات کلیدی:**
|
|
208
|
+
|
|
209
|
+
- پشتیبانی از ارقام فارسی، انگلیسی و سایر زبانها (مانند هندی)
|
|
210
|
+
- قابلیت تنظیم جداکننده ارقام (مثل هزارگان)
|
|
211
|
+
|
|
212
|
+
- اعمال محدودیتهای حداقل و حداکثر با پشتیبانی از اعشار
|
|
213
|
+
- تبدیل خودکار ارقام محلی به ارقام انگلیسی برای پردازش
|
|
214
|
+
- سبک و سازگار با React 16 تا 19
|
|
215
|
+
- پشتیبانی از TypeScript برای توسعه امن
|
|
216
|
+
|
|
217
|
+
### 🚀 نصب
|
|
218
|
+
|
|
219
|
+
پکیج را از طریق npm یا yarn نصب کنید:
|
|
220
|
+
|
|
221
|
+
```bash
|
|
222
|
+
npm install persian-number-input
|
|
223
|
+
```
|
|
224
|
+
|
|
225
|
+
### 💻 مثالهای استفاده
|
|
226
|
+
|
|
227
|
+
#### ۱. استفاده از کامپوننت `PersianNumberInput`
|
|
228
|
+
|
|
229
|
+
این کامپوننت برای ورودیهای فرم با فرمتبندی محلی مناسب است.
|
|
230
|
+
|
|
231
|
+
```jsx
|
|
232
|
+
import React, { useState } from "react";
|
|
233
|
+
import { PersianNumberInput } from "persian-number-input";
|
|
234
|
+
|
|
235
|
+
const App = () => {
|
|
236
|
+
const [number, setNumber] = useState("");
|
|
237
|
+
|
|
238
|
+
return (
|
|
239
|
+
<PersianNumberInput
|
|
240
|
+
initialValue="123456.78"
|
|
241
|
+
separatorCount={3}
|
|
242
|
+
separatorChar=","
|
|
243
|
+
locale="fa"
|
|
244
|
+
maxDecimals={2}
|
|
245
|
+
min={0.5}
|
|
246
|
+
max={1000000.999}
|
|
247
|
+
showZero={true}
|
|
248
|
+
onValueChange={(val) => setNumber(val || "")}
|
|
249
|
+
placeholder="یک عدد وارد کنید"
|
|
250
|
+
className="numeric-input"
|
|
251
|
+
/>
|
|
252
|
+
);
|
|
253
|
+
};
|
|
254
|
+
|
|
255
|
+
export default App;
|
|
256
|
+
```
|
|
257
|
+
|
|
258
|
+
**خروجی**:
|
|
259
|
+
```
|
|
260
|
+
ورودی: 123456.78
|
|
261
|
+
خروجی نمایشی: ۱۲۳,۴۵۶٫۷۸
|
|
262
|
+
خروجی انگلیسی: 123456.78
|
|
263
|
+
```
|
|
264
|
+
|
|
265
|
+
#### ۲. استفاده از هوک `usePersianNumberInput`
|
|
266
|
+
|
|
267
|
+
هوک `usePersianNumberInput` برای کنترل دقیق ورودیهای سفارشی استفاده میشود.
|
|
268
|
+
|
|
269
|
+
```jsx
|
|
270
|
+
import React from "react";
|
|
271
|
+
import { usePersianNumberInput } from "persian-number-input";
|
|
272
|
+
|
|
273
|
+
const CustomInput = () => {
|
|
274
|
+
const { value, onChange, rawValue } = usePersianNumberInput({
|
|
275
|
+
initialValue: "5000.25",
|
|
276
|
+
separatorCount: 3,
|
|
277
|
+
separatorChar: ",",
|
|
278
|
+
locale: "fa",
|
|
279
|
+
maxDecimals: 2,
|
|
280
|
+
min: 0.5,
|
|
281
|
+
max: 10000.999,
|
|
282
|
+
showZero: true,
|
|
283
|
+
});
|
|
284
|
+
|
|
285
|
+
return (
|
|
286
|
+
<div>
|
|
287
|
+
<input
|
|
288
|
+
type="text"
|
|
289
|
+
inputMode="decimal"
|
|
290
|
+
value={value}
|
|
291
|
+
onChange={onChange}
|
|
292
|
+
placeholder="یک عدد وارد کنید"
|
|
293
|
+
/>
|
|
294
|
+
<p>مقدار خام: {rawValue || "بدون مقدار"}</p>
|
|
295
|
+
</div>
|
|
296
|
+
);
|
|
297
|
+
};
|
|
298
|
+
|
|
299
|
+
export default CustomInput;
|
|
300
|
+
```
|
|
301
|
+
|
|
302
|
+
**توضیح**:
|
|
303
|
+
- این هوک وضعیت ورودی و فرمتبندی را مدیریت میکند و `value` (برای نمایش) و `rawValue` (ارقام انگلیسی) را برمیگرداند.
|
|
304
|
+
- برای کامپوننتهای ورودی سفارشی یا فرمهای غیراستاندارد مناسب است.
|
|
305
|
+
- **خروجی**:
|
|
306
|
+
```
|
|
307
|
+
ورودی نمایشی: ۵,۰۰۰٫۲۵
|
|
308
|
+
مقدار خام: 5000.25
|
|
309
|
+
```
|
|
310
|
+
|
|
311
|
+
#### ۳. استفاده از ابزار `transformNumber`
|
|
312
|
+
|
|
313
|
+
تابع `transformNumber` برای فرمتبندی اعداد بدون نیاز به کامپوننت React مناسب است.
|
|
314
|
+
|
|
315
|
+
```javascript
|
|
316
|
+
import { transformNumber } from "persian-number-input";
|
|
317
|
+
|
|
318
|
+
const number = 123456.789;
|
|
319
|
+
const formatted = transformNumber(number, {
|
|
320
|
+
separatorCount: 3,
|
|
321
|
+
separatorChar: ",",
|
|
322
|
+
locale: "fa",
|
|
323
|
+
maxDecimals: 2,
|
|
324
|
+
showZero: true,
|
|
325
|
+
});
|
|
326
|
+
|
|
327
|
+
console.log(formatted); // خروجی: ۱۲۳,۴۵۶٫۷۹
|
|
328
|
+
```
|
|
329
|
+
|
|
330
|
+
**توضیح**:
|
|
331
|
+
- از `transformNumber` برای فرمتبندی اعداد در جداول، برچسبها یا سایر موارد غیرورودی استفاده کنید.
|
|
332
|
+
- همان گزینههای `PersianNumberInput` (مانند `separatorCount` و `locale`) را پشتیبانی میکند.
|
|
333
|
+
- یک رشته با ارقام محلی و فرمتبندی مناسب برمیگرداند.
|
|
334
|
+
|
|
335
|
+
### 📚 مرجع مشخصات (Props)
|
|
336
|
+
|
|
337
|
+
| نام | نوع | پیشفرض | توضیح |
|
|
338
|
+
| --- | --- | --- | --- |
|
|
339
|
+
| `initialValue` | `string | number` | `""` | مقدار اولیه ورودی |
|
|
340
|
+
| `separatorCount` | `number` | `3` | تعداد ارقام در هر گروه (مثلاً ۳ برای هزارگان) |
|
|
341
|
+
| `separatorChar` | `string` | `","` | کاراکتر جداکننده گروهها (مثلاً `,` یا `.`) |
|
|
342
|
+
| `locale` | `string` | `"fa"` | زبان برای محلیسازی ارقام (مثلاً `fa` یا `en`) |
|
|
343
|
+
| `maxDecimals` | `number` | `0` | حداکثر تعداد ارقام اعشاری مجاز |
|
|
344
|
+
| `showZero` | `boolean` | `false` | اگر `true` باشد، عدد `0` را در ورودی خالی یا صفر نمایش میدهد |
|
|
345
|
+
| `min` | `number` | - | حداقل مقدار مجاز (پشتیبانی از اعشار، مثلاً `0.5`) |
|
|
346
|
+
| `max` | `number` | - | حداکثر مقدار مجاز (پشتیبانی از اعشار، مثلاً `1000.201`) |
|
|
347
|
+
| `onValueChange` | `(value: string | undefined) => void` | - | فراخوانی در تغییر مقدار |
|
|
348
|
+
| `...rest` | `InputHTMLAttributes` | - | ویژگیهای استاندارد ورودی HTML (مثل `className`، `placeholder`، `style`) |
|
|
349
|
+
|
|
350
|
+
### 🌟 چرا از این کامپوننت استفاده کنیم؟
|
|
351
|
+
|
|
352
|
+
- **پشتیبانی چندزبانه**: مدیریت آسان ارقام فارسی، انگلیسی یا سایر زبانها.
|
|
353
|
+
- **فرمتبندی انعطافپذیر**: کنترل جداکنندهها، اعشار و نمایش صفر.
|
|
354
|
+
- **اعتبارسنجی قوی**: اعمال محدودیتهای حداقل و حداکثر با دقت اعشاری با ``.
|
|
355
|
+
- **مناسب توسعهدهندگان**: پشتیبانی از TypeScript و API ساده برای ادغام سریع.
|
|
356
|
+
- **سبک و سریع**: بهینهشده برای عملکرد با حداقل وابستگیها.
|
|
357
|
+
|
|
358
|
+
### ❓ سوالات متداول
|
|
359
|
+
|
|
360
|
+
**آیا این پکیج از React 19 پشتیبانی میکند؟**
|
|
361
|
+
بله، کاملاً با React 16 تا 19 سازگار است.
|
|
362
|
+
|
|
363
|
+
**آیا میتوان از اعداد اعشاری استفاده کرد؟**
|
|
364
|
+
بله، با تنظیم `maxDecimals` میتوانید تعداد ارقام اعشاری را مشخص کنید (مثلاً `maxDecimals={2}`).
|
|
365
|
+
|
|
366
|
+
**چگونه میتوان حداقل و حداکثر مقدار را اعمال کرد؟**
|
|
367
|
+
از پراپهای `min` و `max` استفاده کنید که از اعشار پشتیبانی میکنند (مثلاً `min={0.5}` و `max={1000.201}`).
|
|
368
|
+
|
|
369
|
+
**چگونه ظاهر ورودی را سفارشی کنم؟**
|
|
370
|
+
با پراپهای `className` یا `style` میتوانید ظاهر ورودی را تغییر دهید.
|
|
371
|
+
|
|
372
|
+
**اگر کاربر عدد نامعتبری وارد کند چه میشود؟**
|
|
373
|
+
کامپوننت ورودیها را پاکسازی میکند و فقط اعداد معتبر را پردازش میکند، ضمن رعایت محدودیتهای min/max.
|
|
374
|
+
|
|
375
|
+
### 🌟 حمایت از پروژه
|
|
376
|
+
|
|
377
|
+
اگر این پکیج برای شما مفید بود، **لطفاً یک ستاره ⭐ به مخزن GitHub بدهید** تا توسعه بیشتر آن را تشویق کنید.
|
|
378
|
+
|
|
379
|
+
👉 **[مخزن GitHub](https://github.com/javadSharifi/persian-number-input)**
|
|
380
|
+
|
|
381
|
+
از حمایت شما سپاسگزاریم! ❤️🚀
|
|
382
|
+
|
|
383
|
+
### 📈 کلمات کلیدی برای جستجو
|
|
384
|
+
|
|
385
|
+
`ورودی اعداد فارسی`, `کامپوننت React فارسی`, `فرمتبندی اعداد در React`, `ورودی عددی محلیسازیشده`, `ارقام فارسی`, `ورودی عددی React`, `فرمتکننده اعداد`, `کامپوننت TypeScript React`, `ورودی چندزبانه`, `هوک فرمتبندی اعداد`, `ابزار اعداد فارسی`
|
|
386
|
+
|
|
387
|
+
### 📄 مجوز
|
|
388
|
+
|
|
389
|
+
MIT License
|