4

我有这个代码:

var cadena = prompt("Cadena:");

document.write(mayusminus(cadena));

function mayusminus(cad){
    var resultado = "Desconocido";

    if(cad.match(new RegExp("[A-Z]"))){
        resultado="mayúsculas";
    }else{
        if(cad.match(new RegExp("[a-z]"))){
            resultado="minúsculas";
        }else{
            if(cad.match(new RegExp("[a-zA-z]"))){
            resultado = "minúsculas y MAYUSCULAS";
            }
        }
    }
    return resultado;
}

我总是有mayusculas或小号,从不小号 y MAYUSCULAS 混合),我正在学习正则表达式并且不知道我的错误:S

4

3 回答 3

6
new RegExp("[A-Z]")

当任何字符cadena为大写字母时匹配。要在所有字符都是大写时进行匹配,请使用

new RegExp("^[A-Z]+$")

强制它在^开始时开始,$强制它在结束时结束,并+确保在结束之间有一个或多个[A-Z].

于 2012-10-05T12:10:52.713 回答
3

我相信您想使用正则表达式模式^[a-z]+$^[A-Z]+$并且^[a-zA-Z]+$.

在正则表达式中,插入符号^匹配字符串中第一个字符之前的位置。同样,$匹配字符串中最后一个字符之后。另外,+表示一次或多次出现

如果要确保字符串中没有其他列出的字符,则必须在模式中使用^and 。$


JavaScript

s = 'tEst';
r = (s.match(new RegExp("^[a-z]+$")))    ? 'minúsculas' :
    (s.match(new RegExp("^[A-Z]+$")))    ? 'mayúsculas' :
    (s.match(new RegExp("^[a-zA-Z]+$"))) ? 'minúsculas y mayúsculas' :
                                           'desconocido';

在此处测试此代码。

于 2012-10-05T12:11:18.423 回答
2

假设 cad 是foo

// will return false
if (cad.match(new RegExp("[A-Z]"))) {
    resultado="mayúsculas";
// so will go there
} else {
    // will return true
    if (cad.match(new RegExp("[a-z]"))) {
        // so will go there
        resultado="minúsculas";
    } else {
        if (cad.match(new RegExp("[a-zA-z]"))) {
            resultado = "minúsculas y MAYUSCULAS";
        }
    }
}

现在,假设 cad 是FOO

// will return true
if (cad.match(new RegExp("[A-Z]"))) {
    // so will go there
    resultado="mayúsculas";
} else {
    if (cad.match(new RegExp("[a-z]"))) {
        resultado="minúsculas";
    } else {
        if (cad.match(new RegExp("[a-zA-z]"))) {
            resultado = "minúsculas y MAYUSCULAS";
        }
    }
}

最后,假设 cad 是FoO

// will return true
if (cad.match(new RegExp("[A-Z]"))) {
    // so will go there
    resultado="mayúsculas";
} else {
    if (cad.match(new RegExp("[a-z]"))) {
        resultado="minúsculas";
    } else {
        if(cad.match(new RegExp("[a-zA-z]"))) {
            resultado = "minúsculas y MAYUSCULAS";
        }
    }
}

如您所见,嵌套else从未被访问过。

你可以做的是:

if (cad.match(new RegExp("^[A-Z]+$"))) {
    resultado="mayúsculas";
} else if (cad.match(new RegExp("^[a-z]+$"))) {
    resultado="minúsculas";
} else {
    resultado = "minúsculas y MAYUSCULAS";
}

解释:

^表示从字符串的开头

$表示到字符串的末尾

<anything>+至少意味着任何东西。

也就是说,

^[A-Z]+$意味着字符串应该只包含大写字符

^[a-z]+$意味着字符串应该只包含小写字符

因此,如果字符串不仅由大写或小写字符组成,则字符串包含它们两者。

于 2012-10-05T12:17:11.190 回答