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

Эта функция сравнивает два массива произвольной формы и dimesionality:

function equals(a1, a2) {

    if (!Array.isArray(a1) || !Array.isArray(a2)) {
        throw new Error("Arguments to function equals(a1, a2) must be arrays.");
    }

    if (a1.length !== a2.length) {
        return false;
    }

    for (var i=0; i<a1.length; i++) {
        if (Array.isArray(a1[i]) && Array.isArray(a2[i])) {
            if (equals(a1[i], a2[i])) {
                continue;
            } else {
                return false;
            }
        } else {
            if (a1[i] !== a2[i]) {
                return false;
            }
        }
    }

    return true;
}
42
задан Alan Moore 23 February 2009 в 12:35
поделиться

4 ответа

Просто необходимо указать текущее РЕ, сопровождаемое буквой/числом, сопровождаемой текущим РЕ снова:

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

, Так как Вы теперь заявили, что они - JavaScript REs, существует полезный сайт здесь , где можно протестировать РЕ против входных данных.

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

^[A-Za-z0-9 _]*[A-Za-z0-9][A-Za-z0-9 _]*$
56
ответ дан paxdiablo 23 September 2019 в 13:47
поделиться

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

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

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

[\w ]
[^\W_]

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

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

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

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

РЕДАКТИРОВАНИЕ:

Так же, как примечание, я принимаю стиль Perl regexes здесь. Ваш regex механизм может или не может поддерживать вещи как \w и \W.

РЕДАКТИРОВАНИЕ 2:

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

РЕДАКТИРОВАНИЕ 3:

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

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

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

13
ответ дан Chris Lutz 23 September 2019 в 13:47
поделиться

Можно использовать lookaround:

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

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

ОБНОВЛЕНИЕ:

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

^(?=.*[^\W_])[\w ]*$/
7
ответ дан Community 23 September 2019 в 13:47
поделиться
^[ _]*[A-Z0-9][A-Z0-9 _]*$

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

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

9
ответ дан Daniel LeCheminant 23 September 2019 в 13:47
поделиться
Другие вопросы по тегам:

Похожие вопросы: