如何从需要相互比较的两个字符中检测到字母及其上/下案例格式?
我需要得到:
- 如果两个字符都不是字母,则返回-1,
- 如果两个字符都是同一情况,则返回1,
- 如果两个字符是字母,但不是同一情况,则返回0个
示例:
'a'和'g '返回1'a
'和'c'返回1'b
'和g'返回
0'b'和g'返回0'0'and
'?''返回-1
现在我的代码不正确:
function sameCase(a, b) {
if (a.match(/a-z/) && b.match(/a-z/)) {
return 1;
}
if (a.match(/A-Z/) && b.match(/A-Z/)) {
return 0;
}
if (b.match(/a-z/) && a.match(/A-Z/)) {
return 0;
}
return -1;
}
console.log(sameCase('a', 'b'));
console.log(sameCase('A', 'B'));
console.log(sameCase('a', 'B'));
console.log(sameCase('B', 'g'));
console.log(sameCase('0', '?'));
请帮忙..
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

发布评论
评论(5)
贱贱哒 2025-01-31 16:33:41
您正在使用错误的语法进行正则表达式。
/az/
匹配字符串 az
。如果要测试各种字符,则需要将范围包装在 []
中。
另外,您的返回值与您描述的期望不符。
function sameCase(a, b) {
if (
(a.match(/[a-z]/) && b.match(/[a-z]/)) ||
(a.match(/[A-Z]/) && b.match(/[A-Z]/))
) {
return 1;
}
if (
(b.match(/[a-z]/) && a.match(/[A-Z]/)) ||
(b.match(/[A-Z]/) && a.match(/[a-z]/))
) {
return 0;
}
return -1;
}
console.log(sameCase('a', 'b'));
console.log(sameCase('A', 'B'));
console.log(sameCase('a', 'B'));
console.log(sameCase('B', 'g'));
console.log(sameCase('0', '?'));
背叛残局 2025-01-31 16:33:41
+++作为附加信息+++
在 connexo 的方法上构建的方法,并将其变成解决方案,而不仅仅是覆盖的解决方案基本的拉丁语上层和下案字母,可以用<="" a="">对应物,此外,每个字符范围更大...
// based on basic latin letter character classes.
function sameCaseBasicLatin(a, b) {
if (
(a.match(/[a-z]/) && b.match(/[a-z]/)) ||
(a.match(/[A-Z]/) && b.match(/[A-Z]/))
) {
return 1;
}
if (
(b.match(/[a-z]/) && a.match(/[A-Z]/)) ||
(b.match(/[A-Z]/) && a.match(/[a-z]/))
) {
return 0;
}
return -1;
}
// ... ok ...
console.log('`sameCaseBasicLatin` invoked with basic latin letters');
console.log(sameCaseBasicLatin('a', 'b'));
console.log(sameCaseBasicLatin('A', 'B'));
console.log(sameCaseBasicLatin('a', 'B'));
console.log(sameCaseBasicLatin('B', 'g'));
console.log(sameCaseBasicLatin('0', '?'));
// ... but ... not ok.
console.log('`sameCaseBasicLatin` invoked with diacritic latin letters');
console.log(sameCaseBasicLatin('â', 'ê'));
console.log(sameCaseBasicLatin('Â', 'Ê'));
console.log(sameCaseBasicLatin('â', 'Î'));
console.log(sameCaseBasicLatin('Ô', 'ä'));
console.log(sameCaseBasicLatin('-', '#'));
// make use of unicode property escapes.
function sameCaseLetters(a, b) {
// lowercase letter as unicode property escape.
const regXLowerCaseLetter = (/\p{Ll}/u);
// uppercase letter as unicode property escape.
const regXUpperCaseLetter = (/\p{Lu}/u);
if (
(regXLowerCaseLetter.test(a) && regXLowerCaseLetter.test(b)) ||
(regXUpperCaseLetter.test(a) && regXUpperCaseLetter.test(b))
) {
return 1;
}
if (
(regXLowerCaseLetter.test(a) && regXUpperCaseLetter.test(b)) ||
(regXUpperCaseLetter.test(a) && regXLowerCaseLetter.test(b))
) {
return 0;
}
return -1;
}
// ... ok ...
console.log('`sameCaseLetters` invoked with basic latin letters');
console.log(sameCaseLetters('a', 'b'));
console.log(sameCaseLetters('A', 'B'));
console.log(sameCaseLetters('a', 'B'));
console.log(sameCaseLetters('B', 'g'));
console.log(sameCaseLetters('0', '?'));
// ... and ... also ok.
console.log('`sameCaseLetters` invoked with diacritic latin letters');
console.log(sameCaseLetters('â', 'ê'));
console.log(sameCaseLetters('Â', 'Ê'));
console.log(sameCaseLetters('â', 'Î'));
console.log(sameCaseLetters('Ô', 'ä'));
console.log(sameCaseLetters('-', '#'));
.as-console-wrapper { min-height: 100%!important; top: 0; }
你不是我要的菜∠ 2025-01-31 16:33:41
下面介绍的是实现预期目标的一种可能方法。
代码片段
// helper methods to determin lower, upper cases
const isLower = x => x === x.toLowerCase();
const isUpper = x => x === x.toUpperCase();
const sameCase = (a, b) => {
// if either "a" or "b" are not "letter"s, return -1
if (!a.match(/[a-z|A-Z]/) || !b.match(/[a-z|A-Z]/)) return -1;
// if both "a" and "b" are either lower or upper case, return 1
if ((isLower(a) && isLower(b)) || (isUpper(a) && isUpper(b))) return 1;
// return 0 (since "a", "b" are letters, but not same case)
return 0;
};
console.log("sameCase('a', 'b'): ", sameCase('a', 'b'));
console.log("sameCase('A', 'B'): ", sameCase('A', 'B'));
console.log("sameCase('a', 'B'): ", sameCase('a', 'B'));
console.log("sameCase('B', 'g'): ", sameCase('B', 'g'));
console.log("sameCase('0', '?'): ", sameCase('0', '?'));
.as-console-wrapper { max-height: 100% !important; top: 0 }
说明
内联注释上面添加了上述片段。
婴鹅 2025-01-31 16:33:41
另一个可能有些简短的解决方案:
function sameCase(a, b) {
const both = a + b;
if (/[^a-z]/i.test(both)) return -1;
if (/^(?:[a-z]{2}|[A-Z]{2})$/.test(both)) return 1;
return 0;
}
function test(a, b) {
console.log(a, b, sameCase(a,b));
}
test("A", "B");
test("a", "b");
test("A", "b");
test("a", "B");
test("?", "b");
test("a", "?");
test("?", "?");
~没有更多了~
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
您错误地使用了Regex。如果要检查字符是从a到z的字母,则应使用
/[az]/
。You are using regex incorrectly. You should have used
/[a-z]/
if you want to check that your character is a letter from a to z.