2010-05-13 14 views
20

Considere un método de JavaScript que debe comprobar si una cadena dada está en letras mayúsculas. Las cadenas de entrada son nombres de personas.JavaScript - comprobar si hay letras minúsculas en una cadena

El algoritmo actual es comprobar si hay letras minúsculas.

var check1 = "Jack Spratt";  
var check2 = "BARBARA FOO-BAR"; 
var check3 = "JASON D'WIDGET"; 

var isUpper1 = HasLowercaseCharacters(check1); 
var isUpper2 = HasLowercaseCharacters(check2); 
var isUpper3 = HasLowercaseCharacters(check3); 

function HasLowercaseCharacters(string input) 
{ 
    //pattern for finding whether any lowercase alpha characters exist 
    var allLowercase; 

    return allLowercase.test(input); 
} 

¿Es una expresión regular la mejor manera de hacerlo aquí?

¿Qué patrón usaría para determinar si una cadena tiene caracteres alfabéticos en minúsculas?

+0

Justo a-z. No à o à por ejemplo? –

Respuesta

21

también:

function hasLowerCase(str) { 
    return (/[a-z]/.test(str)); 
} 
+13

Esa es una vista muy centrada en el inglés de lo que es una letra minúscula. ¿"À" no es minúscula? Estoy mencionando esto mucho tiempo después de que se aceptó esta respuesta porque esta pregunta ha sido referenciada por [esta pregunta más nueva] (http://stackoverflow.com/questions/3816905). La respuesta '! = ToUpperCase' a continuación es mucho más inclusiva. –

+0

Esto no funcionará en minúsculas, también debe verificar 'undefined'. ' función hasLowerCase (str) { return str? (/[a-z]/.test(str)): falso; } ' – parsh

52
function hasLowerCase(str) { 
    return str.toUpperCase() != str; 
} 

alert(hasLowerCase("HeLLO")); 
alert(hasLowerCase("HELLO")); 

Inténtelo: http://jsfiddle.net/B2bvY/3/

+0

Esta realmente debería ser la respuesta aceptada. Muy inteligente señor. – perry

+0

maldita sea! eso es muy inteligente de hecho. Muchas gracias. – WilomGfx

+0

Gran solución. Me encanta ver enfoques como este. – lux

5
function hasLowerCase(str) { 
    return str.toUpperCase() != str; 
} 

o

function hasLowerCase(str) { 
    for(x=0;x<str.length;x++) 
     if(str.charAt(x) >= 'a' && str.charAt(x) <= 'z') 
      return true; 
    return false; 
} 
+0

¡Belleza! Gracias. –

+0

El segundo funciona con cualquier idioma que no tenga diacríticos o caracteres especiales, por lo que se prefiere el primero. – WilomGfx

0

Pero en qué contexto se está utilizando la secuencia de comandos? ¿Estás simplemente mostrando la entrada del usuario, como un aviso()? Usted podría simplemente forzar una salida deseada.

var inpt = prompt("Enter your name: ", ""); 
var uc = inpt.charAt(0); 
var lc = inpt.slice(1); 
var str1 = uc.toUpperCase(); 
var str2 = lc.toLowerCase(); 
var str = str1 + str2; 
document.write(str); 

Dependiendo de su uso, esto puede no ser la mejor elección ... Sin embargo, si todo lo que estamos tratando de hacer es introducir el usuario pantalla esta forma tan simple podría funcionar para usted.

1

Otra solución única coincide con expresión regular para a-z

function nameHere(str) { 
    return str.match(/[a-z]/); 
} 

o

function nameHere(str) { 
     return /[a-z]/g.test(str); 
    } 
Cuestiones relacionadas