如何在JS比较中忽略破折号或连字符
问题描述:
我想比较页面上的两个输入值。 一个输入值总是以连字符作为空格输入。即“第一个值” 另一个输入值从不以连字符作为空格输入。即“第一值”如何在JS比较中忽略破折号或连字符
“第一次测试”==“第一次测试” 这种看法不同。是否有运营商将这些视为相同?
答
破折号可能会在多品种感谢你所期望的。特别是如果人们复制/粘贴MS Word等输入内容。例如,你会考虑 - 或 - 或 - 或 - 或 - 或 - 或全部是破折号? (它们都是不同的Unicode字符)
如果你关心的部分只是字母数字,那么你最好去掉所有其他的东西。
你认为first-test
和firs 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));
取代它..... – epascarello
你有没有试过*去掉连字符和破折号,或者用空格代替它们? –
“第一次测试”和“第一次测试”是输入值的示例。用户输入这些数据并保存。我想比较一下。一个是url slug,所以它需要破折号,另一个只是一串没有破折号的单词。 – user3330683