2010-05-13 31 views
20

Hãy xem xét một phương thức JavaScript cần kiểm tra xem một chuỗi ký tự có trong tất cả các chữ hoa hay không. Các chuỗi đầu vào là tên của mọi người.JavaScript - kiểm tra các ký tự viết thường trong một chuỗi

Thuật toán hiện tại là kiểm tra mọi chữ thường.

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); 
} 

Là một regex cách tốt nhất để đi đây?

Bạn sẽ sử dụng mẫu nào để xác định chuỗi có bất kỳ ký tự alpha chữ thường nào không?

+0

Chỉ cần một-z. Không à à à? –

Trả lời

21

thêm:

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

Đó là một cái nhìn rất trung tâm tiếng Anh về những gì một chữ cái thường là. Là "à" không thấp hơn? Tôi đang đề cập đến điều này quá lâu sau khi câu trả lời này được chấp nhận bởi vì câu hỏi này đã được tham chiếu bởi [câu hỏi mới hơn này] (http://stackoverflow.com/questions/3816905). Câu trả lời '! = ToUpperCase' bên dưới bao gồm nhiều hơn. –

+0

Điều này sẽ không hoạt động đối với chữ thường, bạn cũng cần kiểm tra 'undefined'. ' chức năng hasLowerCase (str) { return str? (/[a-z]/.test(str)): sai; } ' – parsh

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

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

Thử: http://jsfiddle.net/B2bvY/3/

+0

Điều này thực sự phải là câu trả lời được chấp nhận. Rất thông minh thưa ngài. – perry

+0

chết tiệt! thats rất thông minh thực sự. Cảm ơn rất nhiều. – WilomGfx

+0

Giải pháp tuyệt vời. Tình yêu thấy cách tiếp cận như thế này. – lux

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

hoặc

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

Làm đẹp! Cảm ơn. –

+0

Cách thứ hai hoạt động với bất kỳ ngôn ngữ nào không có dấu phụ hoặc ký tự đặc biệt, đó là lý do tại sao ngôn ngữ đầu tiên được ưu tiên. – WilomGfx

0

Nhưng trong đó bối cảnh mà bạn đang sử dụng kịch bản của bạn? Bạn chỉ cần hiển thị đầu vào của người dùng, chẳng hạn như dấu nhắc()? Bạn chỉ có thể ép buộc một đầu ra mong muốn.

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); 

Tùy thuộc vào cách sử dụng của bạn, điều này có thể không phải là một lựa chọn ... tuy nhiên nếu tất cả các bạn đang cố gắng làm là hiển thị đầu vào sử dụng cách đơn giản này có thể làm việc cho bạn.

1

Một giải pháp khác chỉ phù hợp với regex để một-z

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

hoặc

function nameHere(str) { 
     return /[a-z]/g.test(str); 
    } 
Các vấn đề liên quan