Подтвердить что ты не робот

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

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

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

4b9b3361

Ответ 1

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

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

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

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

^[A-Za-z0-9 _]*[A-Za-z0-9][A-Za-z0-9 _]*$

Ответ 2

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

[A-Za-z0-9 _]
[A-Za-z0-9]

У меня есть две (надеюсь, лучше) замены для этих двух:

[\w ]
[^\W_]

Первый соответствует любому символу слова (буквенно-цифровое и _, а также Юникод) и пробелу. Второй соответствует любому, что не является символом не-слова или подчеркиванием (только буквенно-цифровым, а также Юникодом).

Если вы не хотите, чтобы Unicode соответствовал, то придерживайтесь других ответов. Но они просто выглядят проще на глазах (на мой взгляд). Принимая "предпочтительный" ответ на эту запись и используя более короткие регулярные выражения, мы получаем:

^[\w ]*[^\W_][\w ]*$

Возможно, более читаемый, возможно, меньше. Конечно, короче. Ваш выбор.

EDIT:

Как примечание, я беру здесь регулярные выражения в стиле Perl. Ваш regex engine может поддерживать или не поддерживать такие вещи, как \w и\W.

ИЗМЕНИТЬ 2:

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

ИЗМЕНИТЬ 3:

Попробовав протестировать некоторый Юникод с сайтом тестера регулярных выражений JS, я обнаружил проблему: эта страница использует ISO вместо Unicode. Неудивительно, что мой японский вход не совпал. Ну, это не должно быть трудно исправить:

<meta http-equiv="Content-Type" content="text/html; charset=utf-8">

Или так. Я не знаю, что делать с JavaScript, но я уверен, что это не сложно.

Ответ 3

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

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

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

Ответ 4

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

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

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

ОБНОВЛЕНИЕ:

Добавление изменений, предложенных Крисом Лутцем:

^(?=.*[^\W_])[\w ]*$/

Ответ 5

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

Ответ 6

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

var strString = "Your String";

strString.match(/^[A-Za-z0-9][A-Za-z0-9 ]\*[A-Za-z0-9]\*$/)

Ответ 7

$("#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;
        }
    }
});

Ответ 8

Просто вы можете добавить это в файл 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"/>