тл; д-р
Просто додайте пробіл у своєму класі персонажів .
^[a-zA-Z0-9_ ]*$
Тепер, якщо ви хочете бути суворими ...
Сказане не зовсім коректно. Через те, що *означає нуль або більше , воно збігалося б із усіма наведеними нижче випадками, які зазвичай не означають відповідати:
- Порожній рядок, "".
- Рядок, що складається повністю з пробілів, "".
- Рядок, який веде та / або стежить з пробілами, "Hello World".
- Рядок, що містить кілька пробілів між словами "Hello World".
Спочатку я не вважав, що в такі деталі варто заглиблюватися, оскільки ОП задавали таке основне питання, що, здається, суворість не викликала особливих проблем. Тепер, коли питання набуло певної популярності, я хочу сказати ...
... використовуйте відповідь @ stema .
Що, на мій смак (без використання \w), означає:
^[a-zA-Z0-9_]+( [a-zA-Z0-9_]+)*$
(Будь ласка, підкажіть @stema незалежно.)
Деякі речі, які слід зазначити щодо цієї відповіді (та @ stema's):
Якщо ви хочете дозволити декілька пробілів між словами (скажімо, якщо ви хочете дозволити випадкові подвійні пробіли або працюєте з текстом, вставленим з PDF, копіюючи текст), додайте +пробіл після:
^\w+( +\w+)*$
Якщо ви хочете дозволити вкладки та нові рядки (пробіли), замініть пробіл на \s+:
^\w+(\s+\w+)*$
Тут я пропоную +за замовчуванням, тому що, наприклад, розриви рядків Windows складаються з двох символів пробілів послідовно \r\n, тож вам потрібно +буде ловити обох.
Все ще не працює?
Перевірте, який діалект регулярних виразів ви використовуєте. * У таких мовах, як Java, вам доведеться уникати зворотних нахилів, тобто \\w і \\s. У старіших або більше основних мовах і комунальні послуги, як sed, \wі \sне визначені, тому їх виписувати з класами символів, наприклад [a-zA-Z0-9_] , і [\f\n\p\r\t], відповідно.
* Я знаю, що це питання позначено тегамиvb.net, але, виходячи з 25 000+ переглядів, я здогадуюсь, що це питання не лише ті, хто стикається. В даний час це перший хіт в Google за пошуковою фразою, регулярним словом пробілу виразів .