Summary Table

Categories Total Count
PII 0
URL 0
DNS 0
EKL 0
IP 0
PORT 0
VsID 0
CF 0
AI 0
VPD 0
PL 0
Other 0

File Content

import { AbstractControl, Validators } from '@angular/forms';
import { ServiceDates } from '../pattern/serviceDates';
// Also, using patterns to match the special date range 1900..2099 is very hackish.
// Instead, start and end dates should be directly compared. Making ServiceDates obsolete.

// import serviceDates = pattern.ServiceDates

const date_Service$ = ServiceDates.date_Service$;
const date_Service = ServiceDates.date_Service;
// const dateFmt = /^\d\d\/\d\d\/\d\d\d\d\$/;
// const dateFmt = /^(0[1-9]|1[012])\/(0[1-9]|[12]\d|3[01])\/\d\d\d\d\$/; // allow months 01..12, days 01..31
// 30 days hath september, april, june and november, all the rest have 31, except for february which is 28 (or 29)
const dateFmt = /^(((09|04|06|11)\/(0[1-9]|[12]\d|30))|((01|03|05|07|08|12)\/(0[1-9]|[12]\d|3[01]))|(02\/(0[1-9]|1\d|2[0-9])))\/\d\d\d\d\$/;

// remember, Validator logic is negative,
// returning null for success, and an fail description (object) for failure

export function dateRangeValidatorOpt(control: AbstractControl, minDate?: Date, maxDate?: Date) {
// minDate and maxDate are Date values, not strings!
// we could extend this to handle strings or numbers, but not yet!
const pass = true;
let cond = null; // OK so far
const datestr = control.value; // mm/dd/yyyy
if (datestr === undefined || datestr === null || datestr === '') {
// Allow undefined, null or empty string
return null;
}
if (!dateFmt.test(datestr)) {
cond = { dateRange: { regex: dateFmt.source, value: datestr}}; // failed the test!
} else {
const date = new Date(datestr); // will it work?
if (!!minDate && minDate.getTime() > date.getTime()) {
cond = { dateRange: { min: minDate, value: datestr } }; // failed the test!
} else if (!!maxDate && maxDate.getTime() < date.getTime()) {
cond = { dateRange: { max: minDate, value: datestr } }; // failed the test!
} else {
// Either no restrictions, or it passed between
}
}
return cond;
}

export function dateRangeValidator(control: AbstractControl, minDate?: Date, maxDate?: Date) {
const pass = true;
let cond = null; // OK so far
const datestr = control.value; // mm/dd/yyyy
if (!dateFmt.test(datestr)) {
cond = { dateRange: { regex: dateFmt.source, value: datestr}}; // failed the test!
} else {
const date = new Date(datestr); // will it work?
if (!!minDate && minDate.getTime() > date.getTime()) {
cond = { dateRange: { min: minDate, value: datestr } }; // failed the test!
} else if (!!maxDate && maxDate.getTime() < date.getTime()) {
cond = { dateRange: { max: minDate, value: datestr } }; // failed the test!
} else {
// Either no restrictions, or it passed between
}
}
return cond;
}

export function serviceDateValidator$(control: AbstractControl) {
let cond = null; // OK so far
// return Validators.pattern(
// '(0[1-9]|1[012])[/](0[1-9]|[12][0-9]|3[01])[/](19|20)\\d\\d'
// )
const datestr = control.value; // mm/dd/yyyy
// /^\d\d\/\d\d\/\d\d\d\d$/.test(datestr) && // pre-test is probably not required.
if (!date_Service$.test(datestr)) {
cond = { isNotServiceDate: { regex: date_Service$.source, value: datestr}}; // failed the test!
}
return cond;
}

export function serviceDateValidator(control: AbstractControl) {
let cond = null; // OK so far
const datestr = control.value; // mm/dd/yyyy
if (!date_Service.test(datestr)) {
cond = { isNotServiceDate: { regex: date_Service.source, value: datestr}}; // failed the test!
}
return cond;
}

export function serviceDateValidatorOpt$(control: AbstractControl) {
let cond = null; // OK so far
// return Validators.pattern(
// '(0[1-9]|1[012])[/](0[1-9]|[12][0-9]|3[01])[/](19|20)\\d\\d'
// )
const datestr = control.value; // mm/dd/yyyy
if (datestr === undefined || datestr === null || datestr === '') {
// Allow undefined, null or empty string
return null;
}
if (!date_Service$.test(datestr)) {
cond = { isNotServiceDate: { regex: date_Service$.source, value: datestr}}; // failed the test!
}
return cond;
}

export function serviceDateValidatorOpt(control: AbstractControl) {
let cond = null; // OK so far
const datestr = control.value; // mm/dd/yyyy
if (datestr === undefined || datestr === null || datestr === '') {
// Allow undefined, null or empty string
return null;
}
if (!date_Service.test(datestr)) {
cond = { isNotServiceDate: { regex: date_Service.source, value: datestr}}; // failed the test!
}
return cond;
}