tl; dr
Po prostu dodaj spację w swojej klasie postaci .
^[a-zA-Z0-9_ ]*$
Teraz, jeśli chcesz być surowy ...
Powyższe nie jest dokładnie poprawne. Z uwagi na fakt, że *
oznacza zero lub więcej , pasowałoby do wszystkich następujących przypadków, których zwykle nie oznacza dopasowanie:
- Pusty ciąg „”.
- Ciąg złożony w całości ze spacji „”.
- Ciąg, który prowadzi i / lub prowadzi ze spacjami „Hello World”.
- Ciąg zawierający wiele spacji między słowami „Hello World”.
Początkowo nie sądziłem, że takie szczegóły są warte wniknięcia, ponieważ OP zadawał tak podstawowe pytanie, że wydawało się, że surowość nie jest problemem. Teraz, gdy pytanie zyskało popularność, chcę powiedzieć…
... użyj odpowiedzi @ stema .
Co moim zdaniem (bez użycia \w
) przekłada się na:
^[a-zA-Z0-9_]+( [a-zA-Z0-9_]+)*$
(Niezależnie od tego, proszę głosować na @stema).
Kilka rzeczy, na które należy zwrócić uwagę w związku z tą (i @ macierzystą) odpowiedzią:
Jeśli chcesz zezwolić na wiele spacji między wyrazami (powiedzmy, jeśli chcesz dopuścić przypadkowe podwójne spacje lub jeśli pracujesz z wklejonym tekstem z pliku PDF), dodaj +
po spacji:
^\w+( +\w+)*$
Jeśli chcesz zezwolić na tabulatory i znaki nowej linii (białe znaki), zamień spację na \s+
:
^\w+(\s+\w+)*$
Tutaj sugeruję +
domyślnie, ponieważ, na przykład, łamanie linii systemu Windows składa się z dwóch białych znaków w sekwencji \r\n
, więc musisz +
złapać oba.
Wciąż nie działa?
Sprawdź, jakiego dialektu wyrażeń regularnych używasz. * W językach takich jak Java musisz uciec swoje backslashy, IE \\w
i \\s
. W starszych lub więcej podstawowych języków i narzędzi, jak sed
, \w
i \s
nie są zdefiniowane, więc pisać je z klas postaci, np [a-zA-Z0-9_]
i [\f\n\p\r\t]
, odpowiednio.
* Wiem, że to pytanie jest oznaczonevb.net, ale w oparciu o ponad 25 000 wyświetleń, zgaduję, że to nie tylko ludzie napotykają to pytanie. Obecnie jest to pierwsze trafienie w Google dla wyszukiwanego wyrażenia, słowa w przestrzeni wyrażeń regularnych .