export const validatePageNumbers = (pageNumbers: string): boolean => { if (!pageNumbers.trim()) return false; // Normalize input for validation: remove spaces around commas and other spaces const normalized = pageNumbers.replace(/\s*,\s*/g, ',').replace(/\s+/g, ''); const parts = normalized.split(','); // Regular expressions for different page number formats const allToken = /^all$/i; // Select all pages const singlePageRegex = /^[1-9]\d*$/; // Single page: positive integers only (no 0) const rangeRegex = /^[1-9]\d*-(?:[1-9]\d*)?$/; // Range: 1-5 or open range 10- const mathRegex = /^(?=.*n)[0-9n+\-*/() ]+$/; // Mathematical expressions with n and allowed chars return parts.every(part => { if (!part) return false; return ( allToken.test(part) || singlePageRegex.test(part) || rangeRegex.test(part) || mathRegex.test(part) ); }); };