Чтобы пойти дальше и получить точку, вместо того, чтобы многократно использовать эти:
[A-Za-z0-9 _]
[A-Za-z0-9]
У меня есть две (надеюсь, лучше) замены для этих двух:
[\w ]
[^\W_]
Первый соответствует любому символу слова (буквенно-цифровой и _
, а также Unicode) и пробелу. Второй соответствует любому, что не не является словом или символом подчеркивания (только буквенно-цифровой, а также Unicode).
Если вы не хотите, чтобы Unicode соответствовал, то придерживайтесь других ответов. Но на взгляд это выглядит проще (на мой взгляд). Принятие «предпочтительного» ответа на момент написания этой статьи и использование более коротких регулярных выражений дает нам:
^[\w ]*[^\W_][\w ]*$
Возможно, более читабельно, возможно, меньше. Конечно короче. Ваш выбор.
EDIT:
Как примечание, я предполагаю здесь регулярные выражения в стиле Perl. Ваш движок регулярных выражений может поддерживать или не поддерживать такие вещи, как \ w и \ W.
РЕДАКТИРОВАТЬ 2:
Протестировал мой с помощью тестера JS regex, с которым кто-то связывался, и некоторые базовые примеры работали нормально. Ничего особенного не делал, просто хотел убедиться, что \ w и \ W работают нормально в JS.
РЕДАКТИРОВАТЬ 3:
Попытавшись протестировать некоторый Unicode с помощью сайта JS regex tester, я обнаружил проблему: на этой странице вместо Unicode используется ISO. Не удивительно, что мой японский вклад не соответствовал. О, хорошо, это не должно быть трудно исправить:
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
Или так. Я не знаю, что делать с JavaScript, но уверен, что это не сложно.