如何在 Rhino js 中比较不区分大小写的两个字符串

How to compare two strings case insensitive in Rhino js

我打算检查一个字符串是否是另一个字符串的子字符串。但是,不区分大小写的匹配是不可能的,因为 Rhino 1.7.13 不支持 toLowerCase() 和 toUpperCase() 方法。

var stored_string="{{SSHA1}9BC34549D565D9505B287DE0CD20AC77BE1D3F2C"
var str = "9bc34549d565d9505b287de0cd20ac77be1d3f2c"

我正在使用 indexOf 方法来检查子字符串。

if (stored_string.toString().indexOf(str)===0) {
   //do something
}

有什么好的方法可以使这种比较不区分大小写吗?

这是一个应该可以工作的 toLowerCase polyfill。我不确定犀牛的所有限制,但这应该适用于标准 ASCII 字符 a-z 和 A-Z

function toLowerCase(str) {
  var output = "";
  for (let i = 0; i < str.length; i++) {
    if (str.charCodeAt(i) >= 65 && str.charCodeAt(i) <= 90) {
      output += String.fromCharCode(str.charCodeAt(i) + 32);
    } else {
      output += str[i];
    }
  }
  return output;
}

console.log(toLowerCase(prompt("Enter a string")));

所以我们可以在这里使用它:

function toLowerCase(str) {
  var output = "";
  for (let i = 0; i < str.length; i++) {
    if (str.charCodeAt(i) >= 65 && str.charCodeAt(i) <= 90) {
      output += String.fromCharCode(str.charCodeAt(i) + 32);
    } else {
      output += str[i];
    }
  }
  return output;
}

var stored_string="{{SSHA1}9BC34549D565D9505B287DE0CD20AC77BE1D3F2C"
var str = "9bc34549d565d9505b287de0cd20ac77be1d3f2c"

console.log(toLowerCase(stored_string).indexOf(toLowerCase(str)) !== -1 || toLowerCase(str).indexOf(toLowerCase(stored_string)) !== -1);