тл; д-р
Просто додайте пробіл у своєму класі персонажів .
^[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 за пошуковою фразою, регулярним словом пробілу виразів .