Регулярное выражение: разрешить буквы, цифры и пробелы (хотя бы с одной буквой или цифрой) - PullRequest
42 голосов
/ 23 февраля 2009

В настоящее время я использую это регулярное выражение ^[A-Z0-9 _]*$, чтобы принимать буквы, цифры, пробелы и подчеркивания. Мне нужно изменить его так, чтобы он требовал хотя бы одну цифру или букву где-то в строке. Любая помощь будет оценена!

Это будет для проверки имен пользователей для моего сайта. На самом деле я хотел бы поддерживать как можно больше символов, но хочу убедиться, что я предотвращаю внедрение кода и чтобы символы хорошо отображались для всех пользователей. Поэтому я определенно открыт для предложений по проверке регулярных выражений, которые будут поддерживать более широкий набор символов.

Ответы [ 8 ]

55 голосов
/ 23 февраля 2009

Вам просто нужно указать свой текущий RE, за которым следует буква / номер, а затем снова ваш текущий RE:

^[A-Z0-9 _]*[A-Z0-9][A-Z0-9 _]*$

Поскольку вы уже заявили, что они являются Javascript RE, есть полезный сайт здесь , где вы можете проверить RE по входным данным.

Если вам нужны строчные буквы:

^[A-Za-z0-9 _]*[A-Za-z0-9][A-Za-z0-9 _]*$
13 голосов
/ 23 февраля 2009

Чтобы пойти дальше и получить точку, вместо того, чтобы многократно использовать эти:

[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, но уверен, что это не сложно.

9 голосов
/ 23 февраля 2009
^[ _]*[A-Z0-9][A-Z0-9 _]*$

Вы можете опционально иметь несколько пробелов или подчеркиваний в начале, затем вам нужна одна буква или цифра, а затем произвольное число цифр, букв, пробелов или подчеркиваний после этого.

Что-то, содержащее только пробелы и подчеркивания, не сможет выполнить часть [A-Z0-9].

7 голосов
/ 23 февраля 2009

Вы можете использовать lookaround :

^(?=.*[A-Za-z0-9])[A-Za-z0-9 _]*$

Он проверит заранее, что строка содержит букву или цифру, если он это сделает, то проверит, что остальные символы соответствуют вашим требованиям. Возможно, это можно улучшить, но, похоже, это работает с моими тестами.

ОБНОВЛЕНИЕ:

Добавление модификаций , предложенных Chris Lutz :

^(?=.*[^\W_])[\w ]*$/
2 голосов
/ 28 сентября 2010

для меня @ "^ [\ w] + $" работает, разрешить число, алфавит и пробел, но нужно ввести хотя бы одну букву или цифру.

0 голосов
/ 19 мая 2015

Просто вы можете добавить это в файл jquery.validationEngine-en.js

    "onlyLetterNumberSp": {
                "regex": ^[A-Za-z0-9 _]*[A-Za-z0-9][A-Za-z0-9 _]*$,
                "alertText": "* No special characters allowed"
          },

и назовите его в текстовом поле как

<input type="text" class="form-control validate[required,custom[onlyLetterNumberSp]]"  id="title" name="title" placeholder="Title"/>
0 голосов
/ 06 мая 2013
$("#ValuationName").bind("keypress", function (event) {
    if (event.charCode!=0) {
        var regex = new RegExp("^[a-zA-Z ]+$");
        var key = String.fromCharCode(!event.charCode ? event.which : event.charCode);
        if (!regex.test(key)) {
            event.preventDefault();
            return false;
        }
    }
});
0 голосов
/ 12 апреля 2013

Это будет проверять специальные символы и начальные и конечные пробелы:

var strString = "Your String";

strString.match(/^[A-Za-z0-9][A-Za-z0-9 ]\*[A-Za-z0-9]\*$/)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...