如何在JS比较中忽略破折号或连字符

How to ignore dashes or hyphens in JS comparisons

本文关键字:破折号 连字符 JS 比较      更新时间:2023-09-26

我想比较一个页面上的两个输入值。一个输入值总是以连字符作为空格输入。即"第一个值"其他输入值永远不会以连字符作为空格输入。即"first value"

"first-test" == "first test"这将它们视为不同的。有没有一种算子能把它们看成是一样的?

破折号可能有更多的种类。特别是当人们从Word或类似的软件中复制/粘贴他们的输入时。例如,你会认为-或-或-或-或-或-或-或-都是破折号吗?(都是不同的unicode字符)

如果你关心的部分只是字母数字,你最好去掉其他的部分。

你认为first-testfirs ttest相等吗?如果是,则只需删除所有非字母数字字符即可:

str1 = str1.replace(/[^a-z0-9]/gi,'');
str2 = str2.replace(/[^a-z0-9]/gi,'');
var doMatch = (str1 == str2);

如果没有,则用单个空格替换所有非字母数字部分:

str1 = str1.replace(/[^a-z0-9]+/gi,' ');
str2 = str2.replace(/[^a-z0-9]+/gi,' ');
// trim to ignore space at begin or end
str1 = str1.replace(/^'s+|'s+$/g,'');
str2 = str2.replace(/^'s+|'s+$/g,'');
var doMatch = (str1 == str2);

这也允许人们复制/粘贴在末尾有额外空间的值。这种情况有时会发生,但几乎不引人注意,如果你认为这是不同的,可能会引起很多头痛。

var str1 = 'first-test';
var str2 = 'first test';
var doMatch = str1.replace('-', ' ') === str2.replace('-', ' '); // true

var variableWithHyphen = "variable-value-value";
var variable = "variable value value";
function areEqual(varOne, varTwo) {
  var hypen = new RegExp('-', 'g');
  return varTwo.replace(hypen, " ") === varOne.replace(hypen, " ");
}
alert(areEqual(variable, variableWithHyphen));