diff --git a/src/Scriban.Tests/TestFiles/400-builtins/400-builtins.out.txt b/src/Scriban.Tests/TestFiles/400-builtins/400-builtins.out.txt index 76eb3017..0c54f1e1 100644 --- a/src/Scriban.Tests/TestFiles/400-builtins/400-builtins.out.txt +++ b/src/Scriban.Tests/TestFiles/400-builtins/400-builtins.out.txt @@ -45,6 +45,7 @@ List of all the builtin functions: downcase empty ends_with + equals_ignore_case escape handleize hmac_sha1 diff --git a/src/Scriban.Tests/TestFiles/400-builtins/430-string.out.txt b/src/Scriban.Tests/TestFiles/400-builtins/430-string.out.txt index e85ef160..b476357d 100644 --- a/src/Scriban.Tests/TestFiles/400-builtins/430-string.out.txt +++ b/src/Scriban.Tests/TestFiles/400-builtins/430-string.out.txt @@ -84,3 +84,5 @@ Test Convert from string to numbers: "123.2" | string.to_double + 1: 124.2 hello world hello world +Is "Scriban" equal to "SCRIBAN": true +Is "Scriban" equal to "Liquid": false diff --git a/src/Scriban.Tests/TestFiles/400-builtins/430-string.txt b/src/Scriban.Tests/TestFiles/400-builtins/430-string.txt index 3f7209c7..57ad2fba 100644 --- a/src/Scriban.Tests/TestFiles/400-builtins/430-string.txt +++ b/src/Scriban.Tests/TestFiles/400-builtins/430-string.txt @@ -84,3 +84,5 @@ Test Convert from string to numbers: "123.2" | string.to_double + 1: {{ "123.2" | string.to_double + 1 }} {{ "hello" | string.pad_right 10 }}world hello{{ "world" | string.pad_left 10 }} +Is "Scriban" equal to "SCRIBAN": {{ "Scriban" | string.equals_ignore_case "SCRIBAN" }} +Is "Scriban" equal to "Liquid": {{ "Scriban" | string.equals_ignore_case "Liquid" }} diff --git a/src/Scriban/Functions/StringFunctions.cs b/src/Scriban/Functions/StringFunctions.cs index 75c14e83..ee6171ef 100644 --- a/src/Scriban/Functions/StringFunctions.cs +++ b/src/Scriban/Functions/StringFunctions.cs @@ -305,6 +305,25 @@ public static bool EndsWith(string text, string value) return text.EndsWith(value); } + /// + /// Returns a boolean indicating whether the input string is equal to specified string 'value'. Comparison is case insensitive. + /// + /// The input string + /// The string to compare + /// true if `text` is equal to string `value`, ignoring case + /// + /// ```scriban-html + /// {{ "Scriban" | string.equals_ignore_case "SCRIBAN" }} + /// ``` + /// ```html + /// true + /// ``` + /// + public static bool EqualsIgnoreCase(string text, string value) + { + return text?.Equals(value, StringComparison.InvariantCultureIgnoreCase) ?? false; + } + /// /// Returns a url handle from the input string. /// diff --git a/src/Scriban/Runtime/CustomFunction.Generated.cs b/src/Scriban/Runtime/CustomFunction.Generated.cs index b47a57f8..9342de5c 100644 --- a/src/Scriban/Runtime/CustomFunction.Generated.cs +++ b/src/Scriban/Runtime/CustomFunction.Generated.cs @@ -27,6 +27,7 @@ static DynamicCustomFunction() BuiltinFunctionDelegates.Add(typeof(Scriban.Functions.MathFunctions).GetMethod(nameof(Scriban.Functions.MathFunctions.IsNumber), BindingFlags.Static | BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.DeclaredOnly), method => new Functionbool_object(method)); BuiltinFunctionDelegates.Add(typeof(Scriban.Functions.StringFunctions).GetMethod(nameof(Scriban.Functions.StringFunctions.Contains), BindingFlags.Static | BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.DeclaredOnly), method => new Functionbool_string_string(method)); BuiltinFunctionDelegates.Add(typeof(Scriban.Functions.StringFunctions).GetMethod(nameof(Scriban.Functions.StringFunctions.EndsWith), BindingFlags.Static | BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.DeclaredOnly), method => new Functionbool_string_string(method)); + BuiltinFunctionDelegates.Add(typeof(Scriban.Functions.StringFunctions).GetMethod(nameof(Scriban.Functions.StringFunctions.EqualsIgnoreCase), BindingFlags.Static | BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.DeclaredOnly), method => new Functionbool_string_string(method)); BuiltinFunctionDelegates.Add(typeof(Scriban.Functions.StringFunctions).GetMethod(nameof(Scriban.Functions.StringFunctions.StartsWith), BindingFlags.Static | BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.DeclaredOnly), method => new Functionbool_string_string(method)); BuiltinFunctionDelegates.Add(typeof(Scriban.Functions.StringFunctions).GetMethod(nameof(Scriban.Functions.StringFunctions.Empty), BindingFlags.Static | BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.DeclaredOnly), method => new Functionbool_string(method)); BuiltinFunctionDelegates.Add(typeof(Scriban.Functions.StringFunctions).GetMethod(nameof(Scriban.Functions.StringFunctions.Whitespace), BindingFlags.Static | BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.DeclaredOnly), method => new Functionbool_string(method));