persian-number-input 4.0.1 → 4.0.3
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/dist/hooks/usePersianNumberInput.d.ts +0 -4
- package/dist/hooks/usePersianNumberInput.d.ts.map +1 -1
- package/dist/hooks/usePersianNumberInput.js +19 -32
- package/dist/hooks/usePersianNumberInput.js.map +1 -1
- package/dist/utils/digitUtils.d.ts +6 -6
- package/dist/utils/digitUtils.d.ts.map +1 -1
- package/dist/utils/digitUtils.js +40 -33
- package/dist/utils/digitUtils.js.map +1 -1
- package/package.json +1 -1
|
@@ -7,13 +7,9 @@ interface UsePersianNumberInputProps extends TransformNumberOptions {
|
|
|
7
7
|
max?: number;
|
|
8
8
|
}
|
|
9
9
|
interface UsePersianNumberInputReturn {
|
|
10
|
-
/** مقدار فرمت شده برای نمایش در input. */
|
|
11
10
|
value: string;
|
|
12
|
-
/** تابع onChange برای اتصال به input. */
|
|
13
11
|
onChange: (event: React.ChangeEvent<HTMLInputElement>) => void;
|
|
14
|
-
/** تابع برای تنظیم مقدار به صورت برنامه نویسی (مقدار عددی تمیز). */
|
|
15
12
|
setValue: (newValue: number | string | undefined) => void;
|
|
16
|
-
/** مقدار عددی خام (رشته انگلیسی تمیز شده) */
|
|
17
13
|
rawValue: string | undefined;
|
|
18
14
|
}
|
|
19
15
|
export declare const usePersianNumberInput: ({ initialValue, separatorCount, separatorChar, locale, maxDecimals, showZero, onValueChange, min, max, }?: UsePersianNumberInputProps) => UsePersianNumberInputReturn;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"usePersianNumberInput.d.ts","sourceRoot":"","sources":["../../src/hooks/usePersianNumberInput.ts"],"names":[],"mappings":"AAAA,OAAO,KAAyC,MAAM,OAAO,CAAC;AAE9D,OAAO,EAAmB,sBAAsB,EAAE,MAAM,0BAA0B,CAAC;AAGnF,UAAU,0BAA2B,SAAQ,sBAAsB;IACjE,YAAY,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IAC/B,aAAa,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS,KAAK,IAAI,CAAC;IACpD,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,GAAG,CAAC,EAAE,MAAM,CAAC;CACd;AAED,UAAU,2BAA2B;IACnC,
|
|
1
|
+
{"version":3,"file":"usePersianNumberInput.d.ts","sourceRoot":"","sources":["../../src/hooks/usePersianNumberInput.ts"],"names":[],"mappings":"AAAA,OAAO,KAAyC,MAAM,OAAO,CAAC;AAE9D,OAAO,EAAmB,sBAAsB,EAAE,MAAM,0BAA0B,CAAC;AAGnF,UAAU,0BAA2B,SAAQ,sBAAsB;IACjE,YAAY,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IAC/B,aAAa,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS,KAAK,IAAI,CAAC;IACpD,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,GAAG,CAAC,EAAE,MAAM,CAAC;CACd;AAED,UAAU,2BAA2B;IACnC,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,CAAC,KAAK,EAAE,KAAK,CAAC,WAAW,CAAC,gBAAgB,CAAC,KAAK,IAAI,CAAC;IAC/D,QAAQ,EAAE,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,KAAK,IAAI,CAAC;IAC1D,QAAQ,EAAE,MAAM,GAAG,SAAS,CAAC;CAC9B;AAWD,eAAO,MAAM,qBAAqB,GAAI,2GAUnC,0BAA+B,KAAG,2BA0HpC,CAAC"}
|
|
@@ -11,49 +11,41 @@ const digitUtils_1 = require("../utils/digitUtils");
|
|
|
11
11
|
// تابع کمکی برای گرد کردن مقدار به تعداد اعشار مشخص
|
|
12
12
|
const roundToDecimals = (value, maxDecimals) => {
|
|
13
13
|
if (!value || !value.includes('.'))
|
|
14
|
-
return value;
|
|
14
|
+
return value;
|
|
15
15
|
const [integerPart, fractionalPart] = value.split('.');
|
|
16
16
|
if (maxDecimals === 0)
|
|
17
|
-
return integerPart;
|
|
17
|
+
return integerPart;
|
|
18
18
|
const trimmedFractional = fractionalPart.slice(0, maxDecimals);
|
|
19
19
|
return trimmedFractional ? `${integerPart}.${trimmedFractional}` : integerPart;
|
|
20
20
|
};
|
|
21
21
|
const usePersianNumberInput = ({ initialValue, separatorCount = 3, separatorChar = ',', locale = 'fa', maxDecimals = 0, showZero = false, onValueChange, min, max, } = {}) => {
|
|
22
|
-
// State
|
|
22
|
+
// State برای نگه داشتن مقدار عددی تمیز شده (ارقام انگلیسی)
|
|
23
23
|
const [rawValue, setRawValue] = (0, react_1.useState)(() => {
|
|
24
24
|
if (initialValue === null || initialValue === undefined)
|
|
25
25
|
return undefined;
|
|
26
|
-
// مقدار اولیه را پاکسازی کن
|
|
27
26
|
let sanitized = (0, digitUtils_1.sanitizeNumericInput)(String(initialValue));
|
|
28
|
-
|
|
29
|
-
if (parseFloat(sanitized) === 0 &&
|
|
30
|
-
!showZero &&
|
|
31
|
-
initialValue !== 0 &&
|
|
32
|
-
initialValue !== '0') {
|
|
27
|
+
if (parseFloat(sanitized) === 0 && !showZero && initialValue !== 0 && initialValue !== '0') {
|
|
33
28
|
return undefined;
|
|
34
29
|
}
|
|
35
|
-
// گرد کردن به تعداد اعشار مجاز
|
|
36
30
|
sanitized = roundToDecimals(sanitized, maxDecimals);
|
|
37
|
-
// بررسی min و max برای مقدار اولیه
|
|
38
31
|
if (sanitized) {
|
|
39
32
|
try {
|
|
40
33
|
const numericValue = new decimal_js_1.default(sanitized);
|
|
41
34
|
if ((min !== undefined && numericValue.lt(min)) ||
|
|
42
35
|
(max !== undefined && numericValue.gt(max))) {
|
|
43
|
-
return undefined;
|
|
36
|
+
return undefined;
|
|
44
37
|
}
|
|
45
38
|
}
|
|
46
39
|
catch (error) {
|
|
47
40
|
console.warn(`Invalid initial value: ${sanitized}`, error);
|
|
48
|
-
return undefined;
|
|
41
|
+
return undefined;
|
|
49
42
|
}
|
|
50
43
|
}
|
|
51
|
-
return sanitized || undefined;
|
|
44
|
+
return sanitized || undefined;
|
|
52
45
|
});
|
|
53
|
-
//
|
|
46
|
+
// مقدار نمایشی فرمتشده با استفاده از transformNumber
|
|
54
47
|
const displayValue = (0, react_1.useMemo)(() => {
|
|
55
48
|
const options = { separatorCount, separatorChar, locale, maxDecimals, showZero };
|
|
56
|
-
// اگر rawValue تعریف نشده باشد، "" برگردان
|
|
57
49
|
if (rawValue === undefined) {
|
|
58
50
|
return showZero ? (0, transformNumber_1.transformNumber)('0', options) : '';
|
|
59
51
|
}
|
|
@@ -61,27 +53,24 @@ const usePersianNumberInput = ({ initialValue, separatorCount = 3, separatorChar
|
|
|
61
53
|
}, [rawValue, separatorCount, separatorChar, locale, maxDecimals, showZero]);
|
|
62
54
|
const handleChange = (0, react_1.useCallback)((event) => {
|
|
63
55
|
const inputValue = event.target.value;
|
|
64
|
-
let sanitizedValue = (0, digitUtils_1.sanitizeNumericInput)(inputValue);
|
|
65
|
-
// اگر مقدار پاکسازی شده با مقدار خام فعلی متفاوت بود، آپدیت کن
|
|
56
|
+
let sanitizedValue = (0, digitUtils_1.sanitizeNumericInput)(inputValue);
|
|
66
57
|
if (sanitizedValue !== rawValue) {
|
|
67
|
-
// گرد کردن به تعداد اعشار مجاز
|
|
68
58
|
sanitizedValue = roundToDecimals(sanitizedValue, maxDecimals);
|
|
69
|
-
// بررسی min و max
|
|
70
59
|
let valueToSet = sanitizedValue;
|
|
71
60
|
if (sanitizedValue) {
|
|
72
61
|
try {
|
|
73
62
|
const numericValue = new decimal_js_1.default(sanitizedValue);
|
|
74
63
|
if ((min !== undefined && numericValue.lt(min)) ||
|
|
75
64
|
(max !== undefined && numericValue.gt(max))) {
|
|
76
|
-
return; //
|
|
65
|
+
return; // مقدار خارج از محدوده را نادیده بگیر
|
|
77
66
|
}
|
|
78
67
|
}
|
|
79
68
|
catch (error) {
|
|
80
69
|
console.warn(`Invalid input value: ${sanitizedValue}`, error);
|
|
81
|
-
return;
|
|
70
|
+
return;
|
|
82
71
|
}
|
|
83
72
|
}
|
|
84
|
-
//
|
|
73
|
+
// مدیریت صفر برای showZero
|
|
85
74
|
valueToSet =
|
|
86
75
|
parseFloat(sanitizedValue) === 0 &&
|
|
87
76
|
!showZero &&
|
|
@@ -90,7 +79,7 @@ const usePersianNumberInput = ({ initialValue, separatorCount = 3, separatorChar
|
|
|
90
79
|
: sanitizedValue;
|
|
91
80
|
setRawValue(valueToSet);
|
|
92
81
|
if (onValueChange) {
|
|
93
|
-
onValueChange(valueToSet);
|
|
82
|
+
onValueChange(valueToSet);
|
|
94
83
|
}
|
|
95
84
|
}
|
|
96
85
|
}, [rawValue, onValueChange, showZero, min, max, maxDecimals]);
|
|
@@ -102,20 +91,18 @@ const usePersianNumberInput = ({ initialValue, separatorCount = 3, separatorChar
|
|
|
102
91
|
return;
|
|
103
92
|
}
|
|
104
93
|
let sanitizedValue = (0, digitUtils_1.sanitizeNumericInput)(String(newValue));
|
|
105
|
-
// گرد کردن به تعداد اعشار مجاز
|
|
106
94
|
sanitizedValue = roundToDecimals(sanitizedValue, maxDecimals);
|
|
107
|
-
// بررسی min و max
|
|
108
95
|
if (sanitizedValue) {
|
|
109
96
|
try {
|
|
110
97
|
const numericValue = new decimal_js_1.default(sanitizedValue);
|
|
111
98
|
if ((min !== undefined && numericValue.lt(min)) ||
|
|
112
99
|
(max !== undefined && numericValue.gt(max))) {
|
|
113
|
-
return; //
|
|
100
|
+
return; // مقدار خارج از محدوده را نادیده بگیر
|
|
114
101
|
}
|
|
115
102
|
}
|
|
116
103
|
catch (error) {
|
|
117
104
|
console.warn(`Invalid set value: ${sanitizedValue}`, error);
|
|
118
|
-
return;
|
|
105
|
+
return;
|
|
119
106
|
}
|
|
120
107
|
}
|
|
121
108
|
const valueToSet = parseFloat(sanitizedValue) === 0 &&
|
|
@@ -129,10 +116,10 @@ const usePersianNumberInput = ({ initialValue, separatorCount = 3, separatorChar
|
|
|
129
116
|
}
|
|
130
117
|
}, [onValueChange, showZero, min, max, maxDecimals]);
|
|
131
118
|
return {
|
|
132
|
-
value: displayValue,
|
|
133
|
-
onChange: handleChange,
|
|
134
|
-
setValue: handleSetValue,
|
|
135
|
-
rawValue
|
|
119
|
+
value: displayValue,
|
|
120
|
+
onChange: handleChange,
|
|
121
|
+
setValue: handleSetValue,
|
|
122
|
+
rawValue,
|
|
136
123
|
};
|
|
137
124
|
};
|
|
138
125
|
exports.usePersianNumberInput = usePersianNumberInput;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"usePersianNumberInput.js","sourceRoot":"","sources":["../../src/hooks/usePersianNumberInput.ts"],"names":[],"mappings":";;;;;;AAAA,iCAA8D;AAC9D,4DAAiC;AACjC,8DAAmF;AACnF,oDAA2D;
|
|
1
|
+
{"version":3,"file":"usePersianNumberInput.js","sourceRoot":"","sources":["../../src/hooks/usePersianNumberInput.ts"],"names":[],"mappings":"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"}
|
|
@@ -33,16 +33,16 @@ export declare const localizeDecimalSeparator: (numStr: string, locale: keyof ty
|
|
|
33
33
|
/**
|
|
34
34
|
* گروهبندی ارقام قسمت صحیح یک عدد با استفاده از جداکننده.
|
|
35
35
|
* @param numStr قسمت صحیح عدد (فقط ارقام انگلیسی)
|
|
36
|
-
* @param separatorCount تعداد ارقام در هر گروه
|
|
37
|
-
* @param separatorChar کاراکتر جداکننده
|
|
36
|
+
* @param separatorCount تعداد ارقام در هر گروه
|
|
37
|
+
* @param separatorChar کاراکتر جداکننده
|
|
38
38
|
* @returns رشته گروهبندی شده
|
|
39
39
|
*/
|
|
40
40
|
export declare const groupDigits: (numStr: string, separatorCount: number, separatorChar?: string) => string;
|
|
41
41
|
/**
|
|
42
|
-
*
|
|
43
|
-
*
|
|
44
|
-
* @param value
|
|
45
|
-
* @returns رشته
|
|
42
|
+
* پاکسازی ورودی عددی برای اجازه دادن به کاراکترهای مجاز (اعداد، نقطه و منفی).
|
|
43
|
+
* این نسخه جدید: ارقام فارسی و جداکننده اعشار فارسی را هم پشتیبانی میکند.
|
|
44
|
+
* @param value - رشته ورودی
|
|
45
|
+
* @returns رشته پاکشده
|
|
46
46
|
*/
|
|
47
47
|
export declare const sanitizeNumericInput: (value: string) => string;
|
|
48
48
|
//# sourceMappingURL=digitUtils.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"digitUtils.d.ts","sourceRoot":"","sources":["../../src/utils/digitUtils.ts"],"names":[],"mappings":"AAEA;;GAEG;AACH,eAAO,MAAM,SAAS,EAAE;IAAE,CAAC,GAAG,EAAE,MAAM,GAAG,aAAa,CAAC,MAAM,CAAC,CAAA;CAI7D,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,mBAAmB,EAAE;IAAE,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAAA;CAGxD,CAAC;
|
|
1
|
+
{"version":3,"file":"digitUtils.d.ts","sourceRoot":"","sources":["../../src/utils/digitUtils.ts"],"names":[],"mappings":"AAEA;;GAEG;AACH,eAAO,MAAM,SAAS,EAAE;IAAE,CAAC,GAAG,EAAE,MAAM,GAAG,aAAa,CAAC,MAAM,CAAC,CAAA;CAI7D,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,mBAAmB,EAAE;IAAE,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAAA;CAGxD,CAAC;AAgBF;;;;GAIG;AACH,eAAO,MAAM,sBAAsB,GAAI,KAAK,MAAM,KAAG,MAGpD,CAAC;AAEF;;;;;GAKG;AACH,eAAO,MAAM,iBAAiB,GAAI,QAAQ,MAAM,EAAE,QAAQ,MAAM,OAAO,SAAS,KAAG,MAIlF,CAAC;AAEF;;;;;GAKG;AACH,eAAO,MAAM,wBAAwB,GAAI,QAAQ,MAAM,EAAE,QAAQ,MAAM,OAAO,mBAAmB,KAAG,MAInG,CAAC;AAEF;;;;;;GAMG;AACH,eAAO,MAAM,WAAW,GACtB,QAAQ,MAAM,EACd,gBAAgB,MAAM,EACtB,sBAAmB,KAClB,MAMF,CAAC;AAEF;;;;;GAKG;AACH,eAAO,MAAM,oBAAoB,GAAI,OAAO,MAAM,KAAG,MAgCpD,CAAC"}
|
package/dist/utils/digitUtils.js
CHANGED
|
@@ -7,7 +7,7 @@ exports.sanitizeNumericInput = exports.groupDigits = exports.localizeDecimalSepa
|
|
|
7
7
|
*/
|
|
8
8
|
exports.digitsMap = {
|
|
9
9
|
fa: ["۰", "۱", "۲", "۳", "۴", "۵", "۶", "۷", "۸", "۹"],
|
|
10
|
-
//
|
|
10
|
+
// میتوانید زبانهای دیگر را اضافه کنید
|
|
11
11
|
// in: ["०", "१", "२", "३", "४", "५", "६", "७", "८", "९"],
|
|
12
12
|
};
|
|
13
13
|
/**
|
|
@@ -15,17 +15,19 @@ exports.digitsMap = {
|
|
|
15
15
|
*/
|
|
16
16
|
exports.decimalSeparatorMap = {
|
|
17
17
|
fa: "٫",
|
|
18
|
-
// en: ".",
|
|
18
|
+
// en: ".",
|
|
19
19
|
};
|
|
20
|
+
// همه ارقام محلی را به یک رشته واحد میچسبانیم تا regex بسازیم
|
|
20
21
|
const allLocalizedDigits = Object.values(exports.digitsMap).flat().join("");
|
|
22
|
+
// مپ برای تبدیل رقم محلی به رقم انگلیسی
|
|
21
23
|
const conversionMap = {};
|
|
22
24
|
for (const locale in exports.digitsMap) {
|
|
23
25
|
exports.digitsMap[locale].forEach((digit, index) => {
|
|
24
26
|
conversionMap[digit] = index.toString();
|
|
25
27
|
});
|
|
26
28
|
}
|
|
27
|
-
// Regex
|
|
28
|
-
const localizedDigitsRegex = new RegExp(`[${allLocalizedDigits}]`,
|
|
29
|
+
// Regex برای پیدا کردن تمام ارقام محلی
|
|
30
|
+
const localizedDigitsRegex = new RegExp(`[${allLocalizedDigits}]`, 'g');
|
|
29
31
|
/**
|
|
30
32
|
* تبدیل رشته حاوی ارقام محلی (مانند فارسی) به رشته با ارقام انگلیسی (0-9).
|
|
31
33
|
* @param str رشته ورودی
|
|
@@ -47,7 +49,7 @@ const toLocalizedDigits = (numStr, locale) => {
|
|
|
47
49
|
if (!numStr || !exports.digitsMap[locale])
|
|
48
50
|
return numStr;
|
|
49
51
|
const localeDigits = exports.digitsMap[locale];
|
|
50
|
-
return numStr.replace(/\d/g, (digit) => localeDigits[parseInt(digit)]);
|
|
52
|
+
return numStr.replace(/\d/g, (digit) => localeDigits[parseInt(digit, 10)]);
|
|
51
53
|
};
|
|
52
54
|
exports.toLocalizedDigits = toLocalizedDigits;
|
|
53
55
|
/**
|
|
@@ -59,50 +61,55 @@ exports.toLocalizedDigits = toLocalizedDigits;
|
|
|
59
61
|
const localizeDecimalSeparator = (numStr, locale) => {
|
|
60
62
|
const separator = exports.decimalSeparatorMap[locale];
|
|
61
63
|
if (!separator)
|
|
62
|
-
return numStr;
|
|
63
|
-
return numStr.replace(
|
|
64
|
+
return numStr;
|
|
65
|
+
return numStr.replace('.', separator);
|
|
64
66
|
};
|
|
65
67
|
exports.localizeDecimalSeparator = localizeDecimalSeparator;
|
|
66
68
|
/**
|
|
67
69
|
* گروهبندی ارقام قسمت صحیح یک عدد با استفاده از جداکننده.
|
|
68
70
|
* @param numStr قسمت صحیح عدد (فقط ارقام انگلیسی)
|
|
69
|
-
* @param separatorCount تعداد ارقام در هر گروه
|
|
70
|
-
* @param separatorChar کاراکتر جداکننده
|
|
71
|
+
* @param separatorCount تعداد ارقام در هر گروه
|
|
72
|
+
* @param separatorChar کاراکتر جداکننده
|
|
71
73
|
* @returns رشته گروهبندی شده
|
|
72
74
|
*/
|
|
73
|
-
const groupDigits = (numStr, separatorCount, separatorChar =
|
|
75
|
+
const groupDigits = (numStr, separatorCount, separatorChar = ',') => {
|
|
74
76
|
if (!numStr || separatorCount <= 0) {
|
|
75
77
|
return numStr;
|
|
76
78
|
}
|
|
77
|
-
|
|
78
|
-
const regex = new RegExp(`\\B(?=(\\d{${separatorCount}})+(?!\\d))`, "g");
|
|
79
|
+
const regex = new RegExp(`\\B(?=(\\d{${separatorCount}})+(?!\\d))`, 'g');
|
|
79
80
|
return numStr.replace(regex, separatorChar);
|
|
80
81
|
};
|
|
81
82
|
exports.groupDigits = groupDigits;
|
|
82
83
|
/**
|
|
83
|
-
*
|
|
84
|
-
*
|
|
85
|
-
* @param value
|
|
86
|
-
* @returns رشته
|
|
84
|
+
* پاکسازی ورودی عددی برای اجازه دادن به کاراکترهای مجاز (اعداد، نقطه و منفی).
|
|
85
|
+
* این نسخه جدید: ارقام فارسی و جداکننده اعشار فارسی را هم پشتیبانی میکند.
|
|
86
|
+
* @param value - رشته ورودی
|
|
87
|
+
* @returns رشته پاکشده
|
|
87
88
|
*/
|
|
88
89
|
const sanitizeNumericInput = (value) => {
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
//
|
|
92
|
-
|
|
93
|
-
//
|
|
94
|
-
|
|
95
|
-
//
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
90
|
+
// ۱) تبدیل ارقام فارسی به انگلیسی
|
|
91
|
+
let normalized = (0, exports.convertToEnglishDigits)(value);
|
|
92
|
+
// ۲) تبدیل جداکننده اعشار فارسی (٫) به نقطه
|
|
93
|
+
normalized = normalized.replace(/٫/g, '.');
|
|
94
|
+
// ۳) حذف کاراکترهای غیرمجاز
|
|
95
|
+
let sanitized = normalized.replace(/[^0-9.\-]/g, '');
|
|
96
|
+
// حذف صفرهای ابتدایی مگر در موارد اعشاری
|
|
97
|
+
if (sanitized.startsWith('0') && !sanitized.startsWith('0.') && sanitized.length > 1) {
|
|
98
|
+
sanitized = sanitized.replace(/^0+/, '');
|
|
99
|
+
}
|
|
100
|
+
// نگهداشتن فقط یک نقطه اعشار
|
|
101
|
+
const parts = sanitized.split('.');
|
|
102
|
+
if (parts.length > 2) {
|
|
103
|
+
sanitized = `${parts[0]}.${parts[1]}`;
|
|
104
|
+
}
|
|
105
|
+
// حذف منفیهای اضافه و اطمینان از جای صحیح آن
|
|
106
|
+
sanitized = sanitized.replace(/-+/g, '-');
|
|
107
|
+
if (sanitized.includes('-') && !sanitized.startsWith('-')) {
|
|
108
|
+
sanitized = sanitized.replace(/-/, '');
|
|
109
|
+
}
|
|
110
|
+
// اگر ورودی خالی یا فقط '-' یا '.' است، خالی برگردان
|
|
111
|
+
if (sanitized === '' || sanitized === '-' || sanitized === '.') {
|
|
112
|
+
return '';
|
|
106
113
|
}
|
|
107
114
|
return sanitized;
|
|
108
115
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"digitUtils.js","sourceRoot":"","sources":["../../src/utils/digitUtils.ts"],"names":[],"mappings":";AAAA,sBAAsB;;;AAEtB;;GAEG;AACU,QAAA,SAAS,GAA6C;IACjE,EAAE,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;IACtD,wCAAwC;IACxC,0DAA0D;CAC3D,CAAC;AAEF;;GAEG;AACU,QAAA,mBAAmB,GAA8B;IAC5D,EAAE,EAAE,GAAG;IACP,
|
|
1
|
+
{"version":3,"file":"digitUtils.js","sourceRoot":"","sources":["../../src/utils/digitUtils.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED