tl; dr
Chỉ cần thêm một không gian trong lớp nhân vật của bạn .
^[a-zA-Z0-9_ ]*$
Bây giờ, nếu bạn muốn nghiêm khắc ...
Những điều trên không chính xác. Do thực tế *
có nghĩa là không hoặc nhiều hơn , nó sẽ khớp với tất cả các trường hợp sau đây mà người ta thường không có nghĩa là khớp:
- Một chuỗi rỗng, "".
- Một chuỗi bao gồm toàn bộ khoảng trắng, "".
- Một chuỗi dẫn và / hoặc các vệt có khoảng trắng, "Hello World".
- Một chuỗi chứa nhiều khoảng trắng ở giữa các từ, "Hello World".
Ban đầu tôi không nghĩ những chi tiết như vậy đáng để đi vào, vì OP đã hỏi một câu hỏi cơ bản đến mức có vẻ nghiêm khắc không phải là vấn đề đáng lo ngại. Bây giờ câu hỏi đã trở nên phổ biến, tuy nhiên, tôi muốn nói ...
Mà, trong hương vị của tôi (không sử dụng \w
) dịch thành:
^[a-zA-Z0-9_]+( [a-zA-Z0-9_]+)*$
(Vui lòng upvote @stema bất kể.)
Một số điều cần lưu ý về câu trả lời này (và @ stema's):
Nếu bạn muốn cho phép nhiều khoảng trắng giữa các từ (giả sử, nếu bạn muốn cho phép không gian kép ngẫu nhiên hoặc nếu bạn đang làm việc với văn bản được sao chép từ PDF), thì hãy thêm dấu cách +
sau: khoảng trắng :
^\w+( +\w+)*$
Nếu bạn muốn cho phép các tab và dòng mới (ký tự khoảng trắng), sau đó thay thế khoảng trắng bằng \s+
:
^\w+(\s+\w+)*$
Ở đây tôi đề xuất +
theo mặc định bởi vì, ví dụ, các dòng Windows bao gồm hai ký tự khoảng trắng theo thứ tự \r\n
, vì vậy bạn sẽ cần phải +
bắt cả hai.
Vẫn không làm việc?
Kiểm tra phương ngữ của biểu thức thông thường bạn đang sử dụng. * Trong các ngôn ngữ như Java, bạn sẽ phải thoát khỏi dấu gạch chéo ngược, nghĩa là \\w
và \\s
. Trong các ngôn ngữ và tiện ích cũ hơn hoặc cơ bản hơn, như sed
, \w
và \s
không được xác định, vì vậy hãy viết chúng ra với các lớp ký tự, ví dụ [a-zA-Z0-9_]
và [\f\n\p\r\t]
, tương ứng.
* Tôi biết câu hỏi này được gắn thẻvb.net, nhưng dựa trên hơn 25.000 lượt xem, tôi đoán không chỉ những người gặp phải câu hỏi này. Hiện tại, đây là lần truy cập đầu tiên trên google cho cụm từ tìm kiếm, từ không gian biểu thức chính quy .