openaire-library/utils/string-utils.class.ts

157 lines
4.9 KiB
TypeScript

import {UrlSegment} from '@angular/router';
export class Dates {
public static isValidYear(yearString){
// First check for the pattern
if(!/^\d{4}$/.test(yearString))
return false;
var year = parseInt(yearString, 10);
// Check the ranges of month and year
if(year < 1000 || year > 3000 )
return false;
return true;
}
//format YYYY-MM-DD
public static isValidDate(dateString:string)
{
// First check for the pattern
if(!/^\d{4}\-\d{1,2}\-\d{1,2}$/.test(dateString))
return false;
// Parse the date parts to integers
var parts = dateString.split("-");
var day = parseInt(parts[2], 10);
var month = parseInt(parts[1], 10);
var year = parseInt(parts[0], 10);
if(!this.isValidYear(parts[0])){
return false;
}
// Check the ranges of month and year
if( month == 0 || month > 12)
return false;
var monthLength = [ 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 ];
// Adjust for leap years
if(year % 400 == 0 || (year % 100 != 0 && year % 4 == 0))
monthLength[1] = 29;
// Check the range of the day
return day > 0 && day <= monthLength[month - 1];
}
public static getDateToday():Date{
var myDate = new Date();
return myDate;
}
public static getDateToString(myDate:Date):string{
var date:string = myDate.getFullYear()+ "-" ;
date+=((myDate.getMonth() + 1)<10)?"0"+(myDate.getMonth() + 1):(myDate.getMonth() + 1) ;
date+="-";
date+= (myDate.getDate() <10 )? "0"+myDate.getDate():myDate.getDate() ;
return date;
}
public static getDateXMonthsAgo(x:number):Date{
var myDate = new Date();
myDate.setMonth(myDate.getMonth() - x);
return myDate;
}
public static getDateXYearsAgo(x:number):Date{
var myDate = new Date();
myDate.setFullYear(myDate.getFullYear() - x);
return myDate;
}
public static getDateFromString(date:string):Date{
var myDate = new Date();
myDate.setFullYear(+date.substring(0,4));
myDate.setMonth(((date.length>5 )?(+date.substring(5,7)-1):(0)));
myDate.setDate(((date.length>8 )?(+date.substring(8,11)):(1)));
return myDate;
}
}
export class DOI{
public static getDOIsFromString(str:string):string[]{
var DOIs:string[] = [];
var words:string[] = str.split(" ");
for(var i=0; i< words.length; i++){
if(DOI.isValidDOI(words[i]) && DOIs.indexOf(words[i]) == -1){
DOIs.push(words[i]);
}
}
return DOIs;
}
public static isValidDOI(str:string):boolean{
var exp1 = /\b(10[.][0-9]{4,}(?:[.][0-9]+)*\/(?:(?!["&\'<>])\S)+)\b/g
var exp2 = /\b(10[.][0-9]{4,}(?:[.][0-9]+)*\/(?:(?!["&\'<>])[[:graph:]])+)\b/g
if(str.match(exp1)!=null || str.match(exp2)!=null){
// console.log("It's a DOI");
return true;
}
return false;
}
}
export class StringUtils{
public static quote(params: string):string {
return '"'+params+'"';
}
public static unquote(params: string):string {
if(params.length > 2 && (params[0]=='"' && params[params.length-1]=='"') || (params[0]=="'" && params[params.length-1]=="'")){
params= params.substring(1, params.length-1);
}
return params;
}
public static URIEncode(params: string):string {
return encodeURIComponent(params);
}
public static URIDecode(params: string):string {
return decodeURIComponent(params);
}
public static b64DecodeUnicode(str) {
return decodeURIComponent(Array.prototype.map.call(atob(str), function(c) {
return '%' + ('00' + c.charCodeAt(0).toString(16)).slice(-2);
}).join(''));
}
private emailValidator(email : any): boolean {
if (email.match("^[a-z0-9._%+-]+@[a-z0-9.-]+\.[a-z]{2,4}$"))
return true;
else
return false;
}
public static sliceString(mystr, size: number): string {
const sliced = String(mystr).substr(0, size);
return sliced + (String(mystr).length > size ? '...' : '');
}
public static URLSegmentsToPath(segments: UrlSegment[]): string {
let path = '';
segments.forEach(route => {
path += '/' + route.path;
})
return path;
}
public static isEuropeanCountry(country:string){
let countries =["Albania", "Andorra", "Armenia", "Austria", "Azerbaijan", "Belarus", "Belgium", "Bosnia and Herzegovina",
"Bulgaria", "Croatia", "Cyprus", "Czech Republic", "Denmark", "Estonia", "Finland", "France", "Georgia", "Germany", "Greece", "Hungary", "Iceland", "Ireland",
"Italy", "Kosovo", "Latvia", "Liechtenstein", "Lithuania", "Luxembourg", "Macedonia", "Malta", "Moldova", "Monaco", "Montenegro", "The Netherlands", "Norway","Poland",
"Portugal", "Romania", "Russia", "San Marino", "Serbia", "Slovakia","Slovenia", "Spain", "Sweden", "Switzerland", "Turkey", "Ukraine", "United Kingdom", "Vatican City",
];
return (country && countries.indexOf(country)!= -1);
}
}