我需要得到:
- 如果任一字符不是字母,則回傳 -1
- 如果兩個字符大小寫相同,則回傳 1
- 如果兩個字符都是字母,但大小寫不同,則回傳 0
例子:
'a' 和 'g' 回傳 1
'A' 和 'C' 回傳 1
'b' 和 'G' 回傳 0
“B”和“g”回傳 0
“0”和“?” 回傳 -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', '?'));
請幫忙..
uj5u.com熱心網友回復:
您使用的正則運算式不正確。/[a-z]/如果您想檢查您的字符是否是從 a 到 z 的字母,您應該使用過。
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 1;
}
if (b.match(/[a-z]/) && a.match(/[A-Z]/)) {
return 0;
}
if (a.match(/[a-z]/) && b.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', '?'));
uj5u.com熱心網友回復:
您對正則運算式使用了錯誤的語法。
/a-z/匹配字串a-z。如果要測驗字符范圍,則需要將范圍包裝在[].
此外,您的回傳值與您描述的期望不符。
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', '?'));
uj5u.com熱心網友回復:
下面介紹的是實作預期目標的一種可能方式。
代碼片段
// 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 }
解釋
添加到上述代碼段的行內注釋。
uj5u.com熱心網友回復:
就像附加資訊一樣
在connexo的方法之上構建并將其轉變為不僅涵蓋基本拉丁大寫和小寫字母的解決方案,還可以用其unicode 屬性轉義對應物替換每個字符類,這還涵蓋了更廣泛的每一個字符范圍...
// 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('a', 'ê'));
console.log(sameCaseBasicLatin('?', 'ê'));
console.log(sameCaseBasicLatin('a', '?'));
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('a', 'ê'));
console.log(sameCaseLetters('?', 'ê'));
console.log(sameCaseLetters('a', '?'));
console.log(sameCaseLetters('?', '?'));
console.log(sameCaseLetters('-', '#'));
.as-console-wrapper { min-height: 100%!important; top: 0; }
uj5u.com熱心網友回復:
更改您的 if 條件并檢查大小寫。如果條件回傳 0 到 1,則更改第二個數字(if (a.charAt(/AZ/) && b.charAt(/AZ/)) { return 0; })。并檢查 -1 的非字母值。試試下面的代碼。
function sameCase(a, b){
if(a.match(/[a-z]/i) && b.match(/[a-z]/i)) {
if (a.toLowerCase() === a && b.toLowerCase() === b) {
return 1;
}
if (a.toUpperCase() === a && b.toUpperCase() === b) {
return 1;
}
if (b.toLowerCase() === b && a.toUpperCase() === a || a.toLowerCase() === a && b.toUpperCase() === b) {
return 0;
}
}else{
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', '?'));
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/466590.html
