如何在JS比较中忽略破折号或连字符
How to ignore dashes or hyphens in JS comparisons
我想比较一个页面上的两个输入值。一个输入值总是以连字符作为空格输入。即"第一个值"其他输入值永远不会以连字符作为空格输入。即"first value"
"first-test" == "first test"这将它们视为不同的。有没有一种算子能把它们看成是一样的?
破折号可能有更多的种类。特别是当人们从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));
相关文章:
- 如何将单词(包括单词)与连字符匹配
- 删除图形和数字之间的连字符(-)符号
- JQuery根据连字符前的首字母对列表进行排序
- 如何替换javascript字符串中的前三个连字符
- 带有连字符的 Jquery 表排序器编号
- Javascript将所有文本框值更改为连字符
- regex中连字符的这种用法有效吗
- 使用连字符引用对象的属性名称
- 用连字符分隔匹配值
- 跳过用户输入的文本字符串中的特殊字符,并在 Javascript 中的每个单词后添加连字符
- 为什么不'我的javascript函数允许点,但允许连字符
- 如何防止电子邮件地址的css自动连字符
- 在数组中的偶数之间插入连字符
- JS Regex只允许数字、分号和连字符
- Javascript正则表达式,返回连字符和空格后面的数字
- jQuery只允许使用数字、字母和连字符
- 为什么这个正则表达式可以在有或没有转义的连字符/破折号的情况下工作?
- 如何在JS比较中忽略破折号或连字符
- Angularjs在ngSrc中使用连字符或破折号转义json
- 如何在使用lodash _.words时不分隔破折号/连字符