2011-11-01 43 views
23

Tôi đang cố gắng tạo một regex sẽ trả về false nếu mẫu Chuỗi chứa khoảng trắng hoặc trống. Cho đến nay tôi có điều nàyRegex không trống và không khoảng trắng

[^\s] 

Tôi nghĩ rằng sẽ đảm bảo chuỗi không chứa khoảng trắng nhưng tôi không chắc chắn về cách kiểm tra để đảm bảo không trống. Bất kỳ trợ giúp sẽ được đánh giá cao.

+3

Bạn có thể sử dụng 'str.length() == 0 || str.contains ("") 'cho điều này. –

Trả lời

35

/^$|\s+/ nếu điều này phù hợp, có khoảng trắng hoặc khoảng trống.

+1

+1, nhưng không cần '+'. –

+0

Chính xác. + không cần thiết. Chỉ cần không đặt * ở đó. ;) –

+0

Trong một số ngôn ngữ (ví dụ: Ruby), '^' và '$' có nghĩa là bắt đầu hoặc kết thúc của dòng, không phải chuỗi. Nhưng thực tế thú vị là ngay cả trong trường hợp này, biểu thức sẽ hoạt động chính xác. – skalee

12

Hầu hết các công cụ biểu thức chính quy đều hỗ trợ chuỗi thoát "phần truy cập". Tức là, đối với \s (khoảng trắng) có phần truy cập \S (không có khoảng trắng).

Sử dụng tính năng này, bạn có thể kiểm tra, nếu có ít nhất một ký tự không khoảng trắng với ^\S+$.

PCRE cho PHP has several of these escape sequences.

+0

Regex là tốt, nhưng lời giải thích là một chút sai lầm. Regex của bạn khớp với một chuỗi bao gồm toàn bộ các ký tự không khoảng trắng và có ít nhất một ký tự. Vì vậy, nó không chỉ là "kiểm tra nếu có ít nhất một ký tự không khoảng trống". –

+1

Tại sao lại là downvote? Regex đang giải quyết vấn đề của OP - nếu nó phù hợp, chuỗi không rỗng và không chứa khoảng trắng. –

+1

Đây là một cho tôi. Tôi chỉ đơn giản là 'str.match (/ \ S + /)' –

-1

/^[\s]*$/ trận chuỗi rỗng và chuỗi có chứa khoảng trắng chỉ

+1

Đó không phải là phương tiện được yêu cầu. –

+0

Bạn có thể xóa các dấu ngoặc vuông ở đó. '/^\ s * $ /' sẽ làm cùng một nhiệm vụ. –

+0

@Narendra: Có, nhưng câu hỏi là tìm các chuỗi * chứa * các ký tự khoảng trống ở đâu đó, không chỉ * bao gồm * các ký tự khoảng trắng. –

5

tôi đã kết thúc bằng một cái gì đó tương tự như câu trả lời được chấp nhận, với những thay đổi nhỏ

(^$)|(\s+$) 

Giải thích bởi Expresso

các
 
Select from 2 alternatives (^$) 
    [1] A numbered captured group ^$ 
     Beginning of line^
     End of line $ 
    [2] A numbered captured group (\s+$) 
     Whitespace, one or more repetitions \s+ 
     End of line $ 
+0

Có thể bạn cũng muốn đánh dấu các nhóm này là nhóm không bắt giữ: '(?:^$) | (?: \ S + $)' – Chaoix

3

Trong sự hiểu biết của tôi bạn muốn phù hợp với một chuỗi không trống và không trống, vì vậy câu trả lời hàng đầu là làm ngược lại. Tôi đề nghị:

(.|\s)*\S(.|\s)* 

- điều này khớp với bất kỳ chuỗi nào có chứa ít nhất một ký tự không khoảng trắng (\S ở giữa). Nó có thể được đặt trước và sau đó là bất cứ thứ gì, bất kỳ chuỗi ký tự char hoặc khoảng trống nào (bao gồm cả các dòng mới) - (.|\s)*.

Bạn có thể dùng thử giải thích trên https://regex101.com/.

+0

Sau khi thử tất cả các câu trả lời khác nhau mà tôi đã tìm thấy cho câu hỏi này, một người làm việc cho tôi! – friendoflore

Các vấn đề liên quan