price-seprator
Version:
لایبرری ساده برای جدا کردن سه رقمی قیمت و تبدیل عدد به حروف فارسی و انگلیسی
282 lines (238 loc) • 8.54 kB
Markdown
# Price Separator (جداکننده قیمت و تبدیل به حروف فارسی و انگلیسی)
این لایبرری ساده به شما کمک میکند:
- قیمتها را سه رقم سه رقم جدا کنید (مثلاً 1234567 → 1,234,567)
- عدد قیمت را به حروف فارسی + واحد پولی تبدیل کنید (مثلاً 50000 → پنجاه هزار تومان)
- عدد قیمت را به حروف انگلیسی + واحد پولی تبدیل کنید (مثلاً 50000 → fifty thousand USD)
- حروف فارسی را به عدد تبدیل کنید (مثلاً پنجاه هزار تومان → 50000)
- حروف انگلیسی را به عدد تبدیل کنید (مثلاً fifty thousand → 50000)
## نصب و استفاده
کافیست فایل `src/price-separator.js` را در پروژه خود وارد کنید یا آن را به عنوان ماژول import/require نمایید.
---
## استفاده در HTML ساده
```html
<script src="src/price-separator.js"></script>
<script>
// جدا کردن سه رقمی
document.write(separatePrice(1234567)); // خروجی: 1,234,567
document.write("<br>");
// تبدیل به حروف فارسی
document.write(priceToPersianWords(1234567)); // خروجی: یک میلیون و دویست و سی و چهار هزار و پانصد و شصت و هفت تومان
</script>
```
## استفاده در Node.js
```js
const {
separatePrice,
priceToPersianWords,
priceToEnglishWords,
persianWordsToNumber,
englishWordsToNumber
} = require("./src/price-separator");
// جدا کردن سه رقمی
console.log(separatePrice(50000)); // 50,000
// تبدیل به حروف فارسی
console.log(priceToPersianWords(50000)); // پنجاه هزار تومان
console.log(priceToPersianWords(50000, 'ریال')); // پنجاه هزار ریال
// تبدیل به حروف انگلیسی
console.log(priceToEnglishWords(50000)); // fifty thousand USD
console.log(priceToEnglishWords(50000, 'EUR')); // fifty thousand EUR
// تبدیل حروف به عدد
console.log(persianWordsToNumber('پنجاه هزار تومان')); // 50000
console.log(englishWordsToNumber('fifty thousand dollars')); // 50000
```
## استفاده در React
```jsx
import {
separatePrice,
priceToPersianWords,
priceToEnglishWords,
persianWordsToNumber,
englishWordsToNumber
} from "./src/price-separator";
export default function PriceComponent({ price, text }) {
// تبدیل متن به عدد (اگر متن وارد شده باشد)
const numberFromText = text ?
(text.includes('thousand') ? englishWordsToNumber(text) : persianWordsToNumber(text)) : 0;
return (
<>
<div>قیمت: {separatePrice(price)}</div>
<div>فارسی: {priceToPersianWords(price)}</div>
<div>انگلیسی: {priceToEnglishWords(price)}</div>
{text && <div>تبدیل متن به عدد: {numberFromText}</div>}
</>
);
}
```
## استفاده در Vue
```vue
<template>
<div>
<div>قیمت: {{ separated }}</div>
<div>فارسی: {{ persian }}</div>
<div>انگلیسی: {{ english }}</div>
<div v-if="textInput">
<input v-model="textInput" placeholder="متن به حروف" />
<div>تبدیل به عدد: {{ numberFromText }}</div>
</div>
</div>
</template>
<script>
import {
separatePrice,
priceToPersianWords,
priceToEnglishWords,
persianWordsToNumber,
englishWordsToNumber
} from "./src/price-separator";
export default {
props: ["price"],
data() {
return {
textInput: "",
currency: "تومان"
};
},
computed: {
separated() {
return separatePrice(this.price);
},
persian() {
return priceToPersianWords(this.price, this.currency);
},
english() {
return priceToEnglishWords(this.price, "USD");
},
numberFromText() {
if (!this.textInput) return 0;
return this.textInput.includes('thousand') ?
englishWordsToNumber(this.textInput) :
persianWordsToNumber(this.textInput);
}
},
};
</script>
```
## استفاده در Angular
```typescript
import {
separatePrice,
priceToPersianWords,
priceToEnglishWords,
persianWordsToNumber,
englishWordsToNumber
} from "./src/price-separator";
@Component({
selector: "app-price",
template: `
<div>قیمت: {{ separated }}</div>
<div>فارسی: {{ persian }}</div>
<div>انگلیسی: {{ english }}</div>
<div>
<input [(ngModel)]="textInput" placeholder="متن به حروف" />
<div *ngIf="textInput">تبدیل به عدد: {{ numberFromText }}</div>
</div>
`,
})
export class PriceComponent {
price = 1234567;
textInput = '';
currency = 'تومان';
get separated() {
return separatePrice(this.price);
}
get persian() {
return priceToPersianWords(this.price, this.currency);
}
get english() {
return priceToEnglishWords(this.price, 'USD');
}
get numberFromText() {
if (!this.textInput) return 0;
return this.textInput.includes('thousand') ?
englishWordsToNumber(this.textInput) :
persianWordsToNumber(this.textInput);
}
}
```
---
## مثال برای نمایش زیر اینپوت (HTML)
```html
<input id="priceInput" type="text" />
<div id="priceText"></div>
<script src="src/price-separator.js"></script>
<script>
document.getElementById("priceInput").addEventListener("input", function (e) {
document.getElementById("priceText").innerText = priceToPersianWords(
e.target.value
);
});
</script>
```
## مثال برای نمایش همزمان عدد جداشده و حروف (HTML)
```html
<input id="priceInput2" type="text" />
<div>عدد: <span id="priceNum"></span></div>
<div>فارسی: <span id="persianWords"></span></div>
<div>انگلیسی: <span id="englishWords"></span></div>
<script src="src/price-separator.js"></script>
<script>
document
.getElementById("priceInput2")
.addEventListener("input", function (e) {
document.getElementById("priceNum").innerText = separatePrice(
e.target.value
);
document.getElementById("persianWords").innerText = priceToPersianWords(
e.target.value
);
document.getElementById("englishWords").innerText = priceToEnglishWords(
e.target.value
);
});
</script>
```
## مثال برای تبدیل متن به عدد (HTML)
```html
<input id="textInput" type="text" placeholder="متن به حروف (فارسی یا انگلیسی)" />
<div>عدد: <span id="numberResult"></span></div>
<script src="src/price-separator.js"></script>
<script>
document
.getElementById("textInput")
.addEventListener("input", function (e) {
const text = e.target.value;
let result = 0;
if (text.includes('thousand') ||
text.includes('hundred') ||
text.includes('million')) {
// متن انگلیسی
result = englishWordsToNumber(text);
} else {
// متن فارسی
result = persianWordsToNumber(text);
}
document.getElementById("numberResult").innerText =
result >= 0 ? separatePrice(result) : "نامعتبر";
});
</script>
```
---
## قابلیتها
- بدون وابستگی به فریمورک خاص
- قابل استفاده در همه پروژههای فرانتاند و بکاند
- سبک و سریع
- پشتیبانی از ورودی رشتهای و عددی
- قابل استفاده به صورت ماژول CommonJS و ESModule و همچنین بارگذاری مستقیم در HTML
- پشتیبانی از TypeScript با تعاریف تایپ
- پشتیبانی از تبدیل عدد به حروف فارسی و انگلیسی
- پشتیبانی از تبدیل حروف فارسی و انگلیسی به عدد
- پشتیبانی از واحدهای پولی مختلف (تومان، ریال، دلار، یورو و ...)
- دارای تستهای واحد برای اطمینان از صحت عملکرد
## نصب از طریق npm
```bash
npm install price-seprator
```
یا با استفاده از yarn:
```bash
yarn add price-seprator
```