function isValidSemVer(version) { // Regex for Semantic Versioning 2.0.0 (simplified for common cases, excludes full ABNF parsing) // Major.Minor.Patch (e.g., 1.0.0) // Optional pre-release (e.g., 1.0.0-alpha.1) // Optional build metadata (e.g., 1.0.0+build.123) const semVerRegex = /^(0|[1-9]\d*)\.(0|[1-9]\d*)\.(0|[1-9]\d*)(?:-((?:0|[1-9]\d*|\d*[a-zA-Z-][0-9a-zA-Z-]*)(?:\.(?:0|[1-9]\d*|\d*[a-zA-Z-][0-9a-zA-Z-]*))*))?(?:\+([0-9a-zA-Z-]+(?:\.[0-9a-zA-Z-]+)*))?$/; return semVerRegex.test(version); } // Example usage: // console.log(isValidSemVer("1.0.0")); // true // console.log(isValidSemVer("2.10.5-alpha.3")); // true // console.log(isValidSemVer("0.1.0+build.123"));// true // console.log(isValidSemVer("1.0")); // false (missing patch) // console.log(isValidSemVer("v1.0.0")); // false (leading 'v')