private static bool TryParse(string versionString, out int major, out int minor, out int patch, out string pre, out string build) { major = minor = patch = 0; pre = build = null; if (versionString == null) { return(false); } versionString = versionString.Trim(); if (versionString.Length == 0) { return(false); } if (versionString[0] == 'v' || versionString[0] == 'V' || versionString[0] == '=') { versionString = versionString.Substring(1); } if (versionString.Length == 0) { return(false); } var versionMatch = VersionExpression.Match(versionString); if (!versionMatch.Success) { return(false); } var majorMatch = versionMatch.Groups["major"].Value; var minorMatch = versionMatch.Groups["minor"].Value; var patchMatch = versionMatch.Groups["patch"].Value; if (!int.TryParse(majorMatch, NumberStyles.Integer, CultureInfo.InvariantCulture, out major)) { return(false); } if (string.IsNullOrEmpty(minorMatch)) { minor = 0; } else if (!int.TryParse(minorMatch, NumberStyles.Integer, CultureInfo.InvariantCulture, out minor)) { return(false); } if (string.IsNullOrEmpty(patchMatch)) { patch = 0; } else if (!int.TryParse(patchMatch, NumberStyles.Integer, CultureInfo.InvariantCulture, out patch)) { return(false); } pre = versionMatch.Groups["pre"].Value; build = versionMatch.Groups["build"].Value; return(true); }
public static bool TryParse(string versionString, out ComparatorSemanticVersion version) { version = null; if (versionString == null) { return(false); } versionString = versionString.Trim(); if (versionString.Length == 0) { return(false); } if (versionString[0] == 'v' || versionString[0] == 'V') { versionString = versionString.Substring(1); } if (versionString.Length == 0) { return(false); } var versionMatch = VersionExpression.Match(versionString); if (!versionMatch.Success) { return(false); } int?major, patch, minor; if (!TryParseNumber(versionMatch.Groups["major"].Value, false, out major)) { return(false); } if (!TryParseNumber(versionMatch.Groups["minor"].Value, true, out minor)) { return(false); } if (!TryParseNumber(versionMatch.Groups["patch"].Value, true, out patch)) { return(false); } var pre = versionMatch.Groups["pre"].Value; version = new ComparatorSemanticVersion(major ?? 0, minor, patch, pre); return(true); }
/// <summary>Checks if a given string can be considered a valid <see cref="SemanticVersion" />.</summary> /// <param name="inputString">The string to check for validity.</param> /// <returns>True, if the passed string is a valid <see cref="SemanticVersion" />, otherwise false.</returns> public static bool IsVersion(string inputString) => VersionExpression.IsMatch(inputString);