1 | "use strict";
|
2 | Object.defineProperty(exports, "__esModule", { value: true });
|
3 | exports.parseNumber = exports.security = exports.currency = exports.isValidBankCard = exports.isInteger = exports.halfSpace = exports.digitsToWords = exports.switchKey = exports.decodeURL = exports.arabicNumber = exports.persianNumber = exports.englishNumber = exports.persianChar = void 0;
|
4 |
|
5 | const regExpArabicNumber = new RegExp(/[\u0660-\u0669]/, "g"), regExpPersianNumber = new RegExp(/[\u06f0-\u06f9]/, "g"), regExpEnglishNumber = new RegExp(/[\u0030-\u0039]/, "g");
|
6 |
|
7 | function persianChar(value) {
|
8 | if (!value) {
|
9 | return "";
|
10 | }
|
11 | const arabicChars = [
|
12 | "ي",
|
13 | "ك",
|
14 | "",
|
15 | "دِ",
|
16 | "بِ",
|
17 | "زِ",
|
18 | "ذِ",
|
19 | "ِشِ",
|
20 | "ِسِ",
|
21 | "ى",
|
22 | ], persianChars = ["ی", "ک", "", "د", "ب", "ز", "ذ", "ش", "س", "ی"];
|
23 | for (let i = 0, charsLen = arabicChars.length; i < charsLen; i++) {
|
24 | value = value.replace(new RegExp(arabicChars[i], "g"), persianChars[i]);
|
25 | }
|
26 | return value;
|
27 | }
|
28 | exports.persianChar = persianChar;
|
29 |
|
30 | function englishNumber(value) {
|
31 | if (!value) {
|
32 | return value;
|
33 | }
|
34 | return value
|
35 | .replace(regExpArabicNumber, function (c) {
|
36 | return (c.charCodeAt(0) - 0x0660);
|
37 | })
|
38 | .replace(regExpPersianNumber, function (c) {
|
39 | return (c.charCodeAt(0) - 0x06f0);
|
40 | });
|
41 | }
|
42 | exports.englishNumber = englishNumber;
|
43 |
|
44 | function persianNumber(value) {
|
45 | if (!value) {
|
46 | return "";
|
47 | }
|
48 | return value
|
49 | .replace(regExpArabicNumber, function (c) {
|
50 | return String.fromCharCode(parseInt((c.charCodeAt(0) - 0x0660), 10) + 0x06f0);
|
51 | })
|
52 | .replace(regExpEnglishNumber, function (c) {
|
53 | return String.fromCharCode(parseInt(c, 10) + 0x06f0);
|
54 | });
|
55 | }
|
56 | exports.persianNumber = persianNumber;
|
57 |
|
58 | function arabicNumber(value) {
|
59 | if (!value) {
|
60 | return "";
|
61 | }
|
62 | value = value.toString();
|
63 | return value
|
64 | .replace(regExpPersianNumber, function (c) {
|
65 | return String.fromCharCode(parseInt((c.charCodeAt(0) - 0x06f0), 10) + 0x0660);
|
66 | })
|
67 | .replace(regExpEnglishNumber, function (c) {
|
68 | return String.fromCharCode(parseInt(c, 10) + 0x0660);
|
69 | });
|
70 | }
|
71 | exports.arabicNumber = arabicNumber;
|
72 |
|
73 |
|
74 |
|
75 |
|
76 | function decodeURL(value) {
|
77 | if (!value) {
|
78 | return "";
|
79 | }
|
80 |
|
81 | let old = "";
|
82 | while (old !== value) {
|
83 | old = value;
|
84 | value = value.replace(/(http\S+?)%20/g, "$1\u200c\u200c\u200c_\u200c\u200c\u200c");
|
85 | }
|
86 |
|
87 |
|
88 |
|
89 | value = value.replace(/(http\S+)/g, function (s, p) {
|
90 | return decodeURI(p);
|
91 | });
|
92 |
|
93 | return value.replace(/\u200c\u200c\u200c_\u200c\u200c\u200c/g, "%20");
|
94 | }
|
95 | exports.decodeURL = decodeURL;
|
96 |
|
97 | function switchKey(value) {
|
98 | if (!value) {
|
99 | return "";
|
100 | }
|
101 | const persianChars = [
|
102 | "ض",
|
103 | "ص",
|
104 | "ث",
|
105 | "ق",
|
106 | "ف",
|
107 | "غ",
|
108 | "ع",
|
109 | "ه",
|
110 | "خ",
|
111 | "ح",
|
112 | "ج",
|
113 | "چ",
|
114 | "ش",
|
115 | "س",
|
116 | "ی",
|
117 | "ب",
|
118 | "ل",
|
119 | "ا",
|
120 | "ت",
|
121 | "ن",
|
122 | "م",
|
123 | "ک",
|
124 | "گ",
|
125 | "ظ",
|
126 | "ط",
|
127 | "ز",
|
128 | "ر",
|
129 | "ذ",
|
130 | "د",
|
131 | "پ",
|
132 | "و",
|
133 | "؟",
|
134 | ], englishChar = [
|
135 | "q",
|
136 | "w",
|
137 | "e",
|
138 | "r",
|
139 | "t",
|
140 | "y",
|
141 | "u",
|
142 | "i",
|
143 | "o",
|
144 | "p",
|
145 | "[",
|
146 | "]",
|
147 | "a",
|
148 | "s",
|
149 | "d",
|
150 | "f",
|
151 | "g",
|
152 | "h",
|
153 | "j",
|
154 | "k",
|
155 | "l",
|
156 | ";",
|
157 | "'",
|
158 | "z",
|
159 | "x",
|
160 | "c",
|
161 | "v",
|
162 | "b",
|
163 | "n",
|
164 | "m",
|
165 | ",",
|
166 | "?",
|
167 | ];
|
168 | for (let i = 0, charsLen = persianChars.length; i < charsLen; i++) {
|
169 | value = value.replace(new RegExp(persianChars[i], "g"), englishChar[i]);
|
170 | }
|
171 | return value;
|
172 | }
|
173 | exports.switchKey = switchKey;
|
174 |
|
175 | function digitsToWords(value) {
|
176 | if (!isFinite(value)) {
|
177 | return "";
|
178 | }
|
179 | if (typeof value !== "string") {
|
180 | value = value.toString();
|
181 | }
|
182 | const parts = [
|
183 | "",
|
184 | "هزار",
|
185 | "میلیون",
|
186 | "میلیارد",
|
187 | "تریلیون",
|
188 | "کوادریلیون",
|
189 | "کویینتیلیون",
|
190 | "سکستیلیون",
|
191 | ];
|
192 | const numbers = {
|
193 | 0: [
|
194 | "",
|
195 | "صد",
|
196 | "دویست",
|
197 | "سیصد",
|
198 | "چهارصد",
|
199 | "پانصد",
|
200 | "ششصد",
|
201 | "هفتصد",
|
202 | "هشتصد",
|
203 | "نهصد",
|
204 | ],
|
205 | 1: ["", "ده", "بیست", "سی", "چهل", "پنجاه", "شصت", "هفتاد", "هشتاد", "نود"],
|
206 | 2: ["", "یک", "دو", "سه", "چهار", "پنج", "شش", "هفت", "هشت", "نه"],
|
207 | two: [
|
208 | "ده",
|
209 | "یازده",
|
210 | "دوازده",
|
211 | "سیزده",
|
212 | "چهارده",
|
213 | "پانزده",
|
214 | "شانزده",
|
215 | "هفده",
|
216 | "هجده",
|
217 | "نوزده",
|
218 | ],
|
219 | zero: "صفر",
|
220 | };
|
221 | const delimiter = " و ";
|
222 | const valueParts = value
|
223 | .split("")
|
224 | .reverse()
|
225 | .join("")
|
226 | .replace(/\d{3}(?=\d)/g, "$&,")
|
227 | .split("")
|
228 | .reverse()
|
229 | .join("")
|
230 | .split(",")
|
231 | .map(function (str) {
|
232 | return Array(4 - str.length).join("0") + str;
|
233 | });
|
234 | let result = (function () {
|
235 | const _results = [];
|
236 | for (let iThree in valueParts) {
|
237 | const three = valueParts[iThree];
|
238 | let resultThree = (function () {
|
239 | let _i;
|
240 | const _results1 = [];
|
241 | for (let i = (_i = 0), _len = three.length; _i < _len; i = ++_i) {
|
242 | const digit = three[i];
|
243 | if (i === 1 && digit === "1") {
|
244 | _results1.push(numbers.two[three[2]]);
|
245 | }
|
246 | else if ((i !== 2 || three[1] !== "1") &&
|
247 | numbers[i][digit] !== "") {
|
248 | _results1.push(numbers[i][digit]);
|
249 | }
|
250 | else {
|
251 | continue;
|
252 | }
|
253 | }
|
254 | return _results1;
|
255 | })();
|
256 | const resultThreeString = resultThree.join(delimiter);
|
257 | const _result = resultThreeString
|
258 | ? resultThreeString +
|
259 | " " +
|
260 | parts[valueParts.length - parseInt(iThree, 10) - 1]
|
261 | : resultThreeString;
|
262 | _results.push(_result);
|
263 | }
|
264 | return _results;
|
265 | })();
|
266 | result = result.filter(function (x) {
|
267 | return x.trim() !== "";
|
268 | });
|
269 | const resultString = result.join(delimiter).trim();
|
270 | if (resultString === "") {
|
271 | return numbers.zero;
|
272 | }
|
273 | return resultString;
|
274 | }
|
275 | exports.digitsToWords = digitsToWords;
|
276 |
|
277 | function halfSpace(value) {
|
278 | if (!value) {
|
279 | return "";
|
280 | }
|
281 |
|
282 | let pattern = /((\s\u0645\u06CC)+( )+([\u0600-\u06EF]{1,}){1,})/g;
|
283 | value = value.replace(new RegExp(pattern), "$2\u200C$4");
|
284 |
|
285 | pattern = /(([\u0600-\u06EF]{1,})+( )+(ای|ایی|اند|ایم|اید|ام){1})/g;
|
286 | value = value.replace(new RegExp(pattern), "$2\u200C$4");
|
287 | return value;
|
288 | }
|
289 | exports.halfSpace = halfSpace;
|
290 |
|
291 | function parseNumber(value) {
|
292 | return englishNumber(value).replace(/\D/g, "");
|
293 | }
|
294 | exports.parseNumber = parseNumber;
|
295 |
|
296 | function isInteger(value) {
|
297 | return /^\d+$/.test(value);
|
298 | }
|
299 | exports.isInteger = isInteger;
|
300 |
|
301 |
|
302 |
|
303 |
|
304 |
|
305 | function isValidBankCard(value) {
|
306 |
|
307 | if (!isInteger(value))
|
308 | return false;
|
309 |
|
310 | let nCheck = 0, bEven = false;
|
311 | value = value.replace(/\D/g, "");
|
312 | for (let n = value.length - 1; n >= 0; n--) {
|
313 | const cDigit = value.charAt(n);
|
314 | let nDigit = parseInt(cDigit, 10);
|
315 | if (bEven) {
|
316 | if ((nDigit *= 2) > 9)
|
317 | nDigit -= 9;
|
318 | }
|
319 | nCheck += nDigit;
|
320 | bEven = !bEven;
|
321 | }
|
322 | return nCheck % 10 === 0;
|
323 | }
|
324 | exports.isValidBankCard = isValidBankCard;
|
325 |
|
326 | function currency(value) {
|
327 | if (!value)
|
328 | return "";
|
329 | return value
|
330 | .replace(/[^\d.-]/g, "")
|
331 | .replace(/(\.\d{2})[\W\w]+/g, "$1")
|
332 | .split("")
|
333 | .reverse()
|
334 | .join("")
|
335 | .replace(/(\d{3})/g, "$1,")
|
336 | .split("")
|
337 | .reverse()
|
338 | .join("")
|
339 | .replace(/^([-]{0,1}),/, "$1")
|
340 | .replace(/(\.\d)$/, "$1" + "0")
|
341 | .replace(/\.$/, ".00");
|
342 | }
|
343 | exports.currency = currency;
|
344 |
|
345 | function security(value) {
|
346 | return "*".repeat(value.length);
|
347 | }
|
348 | exports.security = security;
|
349 |
|
\ | No newline at end of file |