Làm cách nào để kiểm tra xem chuỗi có chứa ký tự & khoảng trắng không, không chỉ khoảng trắng?


134

Cách tốt nhất để kiểm tra nếu một chuỗi chỉ chứa khoảng trắng là gì?

Chuỗi được phép chứa các ký tự kết hợp với khoảng trắng, nhưng không chỉ khoảng trắng.

Câu trả lời:


293

Thay vì kiểm tra toàn bộ chuỗi để xem có chỉ khoảng trắng hay không, chỉ cần kiểm tra xem có ít nhất một ký tự của khoảng trắng không :

if (/\S/.test(myString)) {
    // string is not empty and not just whitespace
}

7
Chỉ cần cẩn thận với myString là giá trị null. Nó sẽ trả về true: /\S/.test(null) == true
Dilshod Tadjibaev

6
rất nhiều câu trả lời có regex trong đó! Điều này có nghĩa là không có cách riêng để phát hiện điều trong js? không có chuỗi.IsWhitespace hay cái gì đó? Không có trang trí bản địa?
JonnyRaa

4
@JonnyLeed Vì regex thậm chí còn hỗ trợ cú pháp trong js, nên người ta có thể nói nó thực sự bản địa hơn bất kỳ phương thức tiện ích nào được vận chuyển;)
Ricardo van den Broek

38

Câu trả lời đơn giản nhất nếu trình duyệt của bạn hỗ trợ trim()chức năng

if (myString && !myString.trim()) {
    //First condition to check if string is not empty
    //Second condition checks if string contains just whitespace
}

Ngày nay khi IE 8 là RIP, đây là giải pháp hiệu quả nhất và hiệu quả nhất dựa trên việc thực hiện riêng. Và nó hoạt động chính xác với các tab và dòng mới.
Alexander Abakumov

35
if (/^\s+$/.test(myString))
{
      //string contains only whitespace
}

cái này kiểm tra 1 hoặc nhiều ký tự khoảng trắng, nếu bạn cũng khớp với một chuỗi trống thì thay thế +bằng *.


18

Chà, nếu bạn đang sử dụng jQuery, nó đơn giản hơn.

if ($.trim(val).length === 0){
   // string is invalid
} 

1
Hoạt động cho dòng mới và tab cũng vậy, trong khi các ví dụ regex ở trên thì không vì chúng chỉ tìm kiếm sự vắng mặt của bất cứ thứ gì ngoài khoảng trắng. Mặc dù, tôi chắc chắn rằng ai đó có kiến ​​thức về regex có thể tạo ra một regex cũng bao gồm tab / dòng mới trong tìm kiếm.
Kate

không hoạt động khi val được gán không gian, trong trường hợp của tôi là bốn khoảng trắng.
user1451111

7

Chỉ cần kiểm tra chuỗi dựa trên regex này:

if(mystring.match(/^\s+$/) === null) {
    alert("String is good");
} else {
    alert("String contains only whitespace");
}

1
Cách tôi đọc câu hỏi, nói rằng / any / khoảng trắng được cho phép, miễn là chuỗi không / chỉ / khoảng trắng. Không biết phải làm gì nếu chuỗi trống, vì vậy có thể câu trả lời của nickf vẫn tốt hơn.
Ian Clelland


0

Biểu thức chính quy tôi đã sử dụng khi tôi muốn cho phép khoảng trắng ở giữa chuỗi của mình, nhưng không phải ở đầu hoặc cuối là:

[\S]+(\s[\S]+)*

hoặc là

^[\S]+(\s[\S]+)*$

Vì vậy, tôi biết đây là một câu hỏi cũ, nhưng bạn có thể làm một cái gì đó như:

if (/^\s+$/.test(myString)) {
    //string contains characters and white spaces
}

hoặc bạn có thể làm những gì nickf nói và sử dụng:

if (/\S/.test(myString)) {
    // string is not empty and not just whitespace
}

0

Tôi đã sử dụng phương pháp sau để phát hiện nếu một chuỗi chỉ chứa khoảng trắng. Nó cũng phù hợp với chuỗi trống.

if (/^\s*$/.test(myStr)) {
  // the string contains only whitespace
}

0

Đây có thể là giải pháp nhanh chóng

return input < "\u0020" + 1;

Đó chỉ là làm return input < " 1"; mà chỉ là so sánh theo thứ tự abc. Miễn là đầu vào được sắp xếp thấp hơn "1", nó sẽ trả về đúng. Ví dụ: return " asdfv34562345" < "\u0020" + 1;đánh giá là đúng.
Derek Ziemba
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.