30 lines
920 B
TypeScript
30 lines
920 B
TypeScript
const PERSIAN_DIGITS = '۰۱۲۳۴۵۶۷۸۹'
|
||
const ARABIC_DIGITS = '٠١٢٣٤٥٦٧٨٩'
|
||
|
||
/** تبدیل ارقام فارسی/عربی و جداکننده اعشار به فرمت انگلیسی */
|
||
export function persianToEnglishDigits(value: string | number | null | undefined): string {
|
||
if (value == null) {
|
||
return ''
|
||
}
|
||
|
||
return String(value)
|
||
.replace(/[۰-۹]/g, (d) => String(PERSIAN_DIGITS.indexOf(d)))
|
||
.replace(/[٠-٩]/g, (d) => String(ARABIC_DIGITS.indexOf(d)))
|
||
.replace(/٫/g, '.')
|
||
}
|
||
|
||
export function shouldNormalizeInputDigits(options: {
|
||
isPassword?: boolean
|
||
type?: string
|
||
inputmode?: string
|
||
}): boolean {
|
||
if (options.isPassword) {
|
||
return false
|
||
}
|
||
if (options.type === 'price' || options.type === 'number') {
|
||
return true
|
||
}
|
||
const mode = String(options.inputmode ?? '').trim().toLowerCase()
|
||
return mode === 'numeric' || mode === 'decimal' || mode === 'number'
|
||
}
|