dev-utils-plus
Version:
Type-safe utility functions for JavaScript/TypeScript: string, array, object, date, validation, crypto, format, math
176 lines • 4.82 kB
JavaScript
;
/**
* Validation utility functions for common validation tasks
*/
Object.defineProperty(exports, "__esModule", { value: true });
exports.isValidEmail = isValidEmail;
exports.isValidUrl = isValidUrl;
exports.isValidPhoneNumber = isValidPhoneNumber;
exports.isValidCreditCard = isValidCreditCard;
exports.isValidPassword = isValidPassword;
exports.isValidIPv4 = isValidIPv4;
exports.isValidIPv6 = isValidIPv6;
exports.isValidPostalCode = isValidPostalCode;
exports.isValidSSN = isValidSSN;
exports.isValidDate = isValidDate;
exports.isValidTime = isValidTime;
exports.isValidHexColor = isValidHexColor;
exports.isValidJSON = isValidJSON;
exports.isValidUUID = isValidUUID;
exports.validateSchema = validateSchema;
/**
* Checks if a value is a valid email address
*/
function isValidEmail(email) {
const emailRegex = /^[^\s@]+@[^\s@]+\.[^\s@]+$/;
return emailRegex.test(email);
}
/**
* Checks if a value is a valid URL
*/
function isValidUrl(url) {
try {
new URL(url);
return true;
}
catch {
return false;
}
}
/**
* Checks if a value is a valid phone number (basic validation)
*/
function isValidPhoneNumber(phone) {
const phoneRegex = /^[\+]?[1-9][\d]{0,15}$/;
return phoneRegex.test(phone.replace(/[\s\-\(\)]/g, ''));
}
/**
* Checks if a value is a valid credit card number (Luhn algorithm)
*/
function isValidCreditCard(cardNumber) {
const cleanNumber = cardNumber.replace(/\s/g, '');
if (!/^\d{13,19}$/.test(cleanNumber))
return false;
let sum = 0;
let isEven = false;
for (let i = cleanNumber.length - 1; i >= 0; i--) {
let digit = parseInt(cleanNumber.charAt(i));
if (isEven) {
digit *= 2;
if (digit > 9) {
digit -= 9;
}
}
sum += digit;
isEven = !isEven;
}
return sum % 10 === 0;
}
/**
* Checks if a value is a valid password (minimum requirements)
*/
function isValidPassword(password, options = {}) {
const { minLength = 8, requireUppercase = true, requireLowercase = true, requireNumbers = true, requireSpecialChars = false } = options;
if (password.length < minLength)
return false;
if (requireUppercase && !/[A-Z]/.test(password))
return false;
if (requireLowercase && !/[a-z]/.test(password))
return false;
if (requireNumbers && !/\d/.test(password))
return false;
if (requireSpecialChars && !/[!@#$%^&*(),.?":{}|<>]/.test(password))
return false;
return true;
}
/**
* Checks if a value is a valid IPv4 address
*/
function isValidIPv4(ip) {
const ipv4Regex = /^(\d{1,3}\.){3}\d{1,3}$/;
if (!ipv4Regex.test(ip))
return false;
const parts = ip.split('.');
return parts.every(part => {
const num = parseInt(part);
return num >= 0 && num <= 255;
});
}
/**
* Checks if a value is a valid IPv6 address
*/
function isValidIPv6(ip) {
const ipv6Regex = /^([0-9a-fA-F]{1,4}:){7}[0-9a-fA-F]{1,4}$/;
return ipv6Regex.test(ip);
}
/**
* Checks if a value is a valid postal code (US format)
*/
function isValidPostalCode(postalCode) {
const postalRegex = /^\d{5}(-\d{4})?$/;
return postalRegex.test(postalCode);
}
/**
* Checks if a value is a valid social security number (US format)
*/
function isValidSSN(ssn) {
const ssnRegex = /^\d{3}-\d{2}-\d{4}$/;
return ssnRegex.test(ssn);
}
/**
* Checks if a value is a valid date string
*/
function isValidDate(dateString) {
const date = new Date(dateString);
return !isNaN(date.getTime());
}
/**
* Checks if a value is a valid time string (HH:MM format)
*/
function isValidTime(timeString) {
const timeRegex = /^([01]?[0-9]|2[0-3]):[0-5][0-9]$/;
return timeRegex.test(timeString);
}
/**
* Checks if a value is a valid hexadecimal color code
*/
function isValidHexColor(color) {
const hexRegex = /^#([A-Fa-f0-9]{6}|[A-Fa-f0-9]{3})$/;
return hexRegex.test(color);
}
/**
* Checks if a value is a valid JSON string
*/
function isValidJSON(jsonString) {
try {
JSON.parse(jsonString);
return true;
}
catch {
return false;
}
}
/**
* Checks if a value is a valid UUID
*/
function isValidUUID(uuid) {
const uuidRegex = /^[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/i;
return uuidRegex.test(uuid);
}
/**
* Validates an object against a schema
*/
function validateSchema(obj, schema) {
const errors = [];
for (const [key, validator] of Object.entries(schema)) {
const validatorFn = validator;
if (!validatorFn(obj[key])) {
errors.push(`Invalid value for ${key}`);
}
}
return {
isValid: errors.length === 0,
errors
};
}
//# sourceMappingURL=index.js.map