UNPKG

9.91 kBJavaScriptView Raw
1"use strict";
2Object.defineProperty(exports, "__esModule", { value: true });
3exports.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// Declare Number Arrays in different locales
5const regExpArabicNumber = new RegExp(/[\u0660-\u0669]/, "g"), regExpPersianNumber = new RegExp(/[\u06f0-\u06f9]/, "g"), regExpEnglishNumber = new RegExp(/[\u0030-\u0039]/, "g");
6/** Used for convert Arabic characters to Persian */
7function 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}
28exports.persianChar = persianChar;
29/** Used for convert any numbers to English */
30function 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}
42exports.englishNumber = englishNumber;
43/** Used for convert any numbers to Persian */
44function 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}
56exports.persianNumber = persianNumber;
57/** Used for convert any numbers to arabic */
58function 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}
71exports.arabicNumber = arabicNumber;
72/**
73 * Used for decode Persian Characters in URL
74 * https://fa.wikipedia.org/wiki/مدیاویکی:Gadget-Extra-Editbuttons-Functions.js
75 */
76function decodeURL(value) {
77 if (!value) {
78 return "";
79 }
80 // Replace every %20 with _ to protect them from decodeURI
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 // Decode URIs
87 // NOTE: This would convert all %20's to _'s which could break some links
88 // but we will undo that later on
89 value = value.replace(/(http\S+)/g, function (s, p) {
90 return decodeURI(p);
91 });
92 // Revive all instances of %20 to make sure no links is broken
93 return value.replace(/\u200c\u200c\u200c_\u200c\u200c\u200c/g, "%20");
94}
95exports.decodeURL = decodeURL;
96/** Used for Change keyboard layout */
97function 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}
173exports.switchKey = switchKey;
174/** Used for get persian words representation of a number */
175function 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}
275exports.digitsToWords = digitsToWords;
276/** Used for Zero-width non-joiner correction */
277function halfSpace(value) {
278 if (!value) {
279 return "";
280 }
281 // Replace Zero-width non-joiner between persian MI.
282 let pattern = /((\s\u0645\u06CC)+( )+([\u0600-\u06EF]{1,}){1,})/g;
283 value = value.replace(new RegExp(pattern), "$2\u200C$4");
284 // Replace Zero-width non-joiner between persian De-Yii.
285 pattern = /(([\u0600-\u06EF]{1,})+( )+(ای|ایی|اند|ایم|اید|ام){1})/g;
286 value = value.replace(new RegExp(pattern), "$2\u200C$4");
287 return value;
288}
289exports.halfSpace = halfSpace;
290/** Remove anything expect numbers */
291function parseNumber(value) {
292 return englishNumber(value).replace(/\D/g, "");
293}
294exports.parseNumber = parseNumber;
295/** Used for validation integer number */
296function isInteger(value) {
297 return /^\d+$/.test(value);
298}
299exports.isInteger = isInteger;
300/**
301 * Used for validation back card number
302 *
303 * @param {string} value 16 digit
304 */
305function isValidBankCard(value) {
306 // accept only digits, dashes or spaces
307 if (!isInteger(value))
308 return false;
309 // The Luhn Algorithm. It's so pretty.
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}
324exports.isValidBankCard = isValidBankCard;
325/** Used for convert english number to currency mode */
326function 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}
343exports.currency = currency;
344/** Convert any char to star ("*") */
345function security(value) {
346 return "*".repeat(value.length);
347}
348exports.security = security;
349//# sourceMappingURL=lib.js.map
\No newline at end of file