projects/ngx-persian/src/lib/Services/persian-letter.service.ts
Properties |
|
Methods |
|
Private Static _getMatchedPatternLength |
_getMatchedPatternLength(value: string, options: PLOptions)
|
This method gets regex of persian letters and other chars specified in the options and then splits the input value by that regex. If match result is null - there is no match - returns 0. otherwise returns length of the match array that shows number of matched occurred in the input value.
Returns :
number
a number greater equal to 0 representing number of matches occurred in the input value. |
Private Static _stringValidationRegex | ||||||
_stringValidationRegex(options: PLOptions)
|
||||||
According to the options values, returns a RegExp object. The regex pattern of it contains regex of finding each of elements those specified in the options object plus persian letters.
Parameters :
Returns :
RegExp
a RegExp object that can use in searching a string for special characters (persian letters and others specified in the options) |
containsPersian | ||||||
containsPersian(value: string)
|
||||||
If input value contains any persian letter or is an empty string, returns true. otherwise returns false.
Parameters :
Returns :
boolean
|
isPersian | |||||||||||||||
isPersian(value: string, options: PLOptions)
|
|||||||||||||||
Checks if input value is a persian text or not. If input value contains any letter that is not persian, the output will be false. Result of validation on existence of other characters controls by options parameter.
You can combine any number of options field together.
Parameters :
Returns :
boolean
|
toPersian | ||||||
toPersian(value: string)
|
||||||
Converts arabic letters: ي and ك to persian corresponding letters.
Parameters :
Returns :
string
|
Private Static SYMBOLS_PATTERN |
Type : string
|
Default value : '؟$-/:-?،{-~!"^_`\\[\\]'
|
Static WHITESPACES_PATTERN |
Type : string
|
Default value : '\\s'
|
import {Injectable} from '@angular/core';
import {PersianService} from './persian-service';
import {PersianNumberService} from './persian-number.service';
/**
* IsPersian options parameter object should implement this interface. Fields descriptions are in the isPersian method document.
*/
export interface PLOptions {
persianDigits?: boolean;
enDigits?: boolean;
symbols?: boolean;
whitespaces?: boolean;
}
@Injectable({
providedIn: 'root'
})
/**
* This service brings validation of persian texts to the program and let you convert some not-persian letters with persian ones.
*
*/
export class PersianLetterService implements PersianService {
static PERSIAN_LETTERS_PATTERN = '\u06A9\u06AF\u06C0\u06CC\u060C\u062A\u062B\u062C\u062D\u062E\u062F\u063A\u064A\u064B\u064C' +
'\u064D\u064E\u064F\u067E\u0670\u0686\u0698\u200C\u0621-\u0629\u0630-\u0639\u0641-\u0654';
static WHITESPACES_PATTERN = '\\s';
private static SYMBOLS_PATTERN = '؟$-/:-?،{-~!"^_`\\[\\]';
/**
* According to the options values, returns a RegExp object. The regex pattern of it contains regex of finding each of
* elements those specified in the options object plus persian letters.
*
* @return a RegExp object that can use in searching a string for special characters (persian letters and others specified in the options)
* @param options
*/
private static _stringValidationRegex(options: PLOptions): RegExp {
let result = '';
if (options.enDigits) {
result += '0-9';
}
if (options.symbols) {
result += PersianLetterService.SYMBOLS_PATTERN;
}
if (options.whitespaces) {
result += PersianLetterService.WHITESPACES_PATTERN;
}
if (options.persianDigits) {
result += PersianNumberService.persianNumberPattern;
}
// Language=JSRegexp
return new RegExp(`[${result + PersianLetterService.PERSIAN_LETTERS_PATTERN}]`, 'g');
}
/**
* This method gets regex of persian letters and other chars specified in the options and then splits the input value by that regex.
*
* If match result is null - there is no match - returns 0. otherwise returns length of the match array that shows number of matched
* occurred in the input value.
*
* @param value
* @param options
* @return a number greater equal to 0 representing number of matches occurred in the input value.
*/
private static _getMatchedPatternLength(value: string, options: PLOptions): number {
const matchResult = value.match(PersianLetterService._stringValidationRegex(options));
return matchResult ? matchResult.length : 0;
}
/**
* If input value contains any persian letter or is an empty string, returns true. otherwise returns false.
*
* @param value
*/
containsPersian(value: string): boolean {
// Language=JSRegexp
const persianRegex = new RegExp(`[${PersianLetterService.PERSIAN_LETTERS_PATTERN}]`);
return value.trim() ? persianRegex.test(value) : true;
}
/**
* Checks if input value is a persian text or not. If input value contains any letter that is not persian, the output will be false.
* Result of validation on existence of other characters controls by options parameter.
*
* @param value
* @param options controlling validation result on existence of other characters controls by options parameter. Fields:
*
* persianDigits: if sets to true, validation result will be true if input value contains persian digits plus persian letters.
*
*
* enDigits: if sets to true, validation result will be true if input value contains english digits plus persian letters
*
*
* symbols: if sets to true, validation result will be true if input value contains specific symbols plus persian letters.
* symbols list: ?$-/:؟!~"'^_-[]{}()%&*><;
*
*
* whitespaces: if sets to true, validation result will be true if input value contains white spaces plus persian letters
*
*
* You can combine any number of options field together.
*/
isPersian(value: string, options: PLOptions = {
persianDigits: false,
enDigits: false,
symbols: true,
whitespaces: true
}): boolean {
return value.length === PersianLetterService._getMatchedPatternLength(value, options);
}
/**
* Converts arabic letters: ي and ك to persian corresponding letters.
*
* @param value
*/
toPersian(value: string): string {
return value.replace(/ي/g, 'ی').replace(/ك/g, 'ک');
}
}