Регулярное выражение для буквенно-цифровых и подчеркиваний

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

Ответ 1

Чтобы сопоставить строку, содержащую только те символы (или пустую строку), попробуйте

"^[a-zA-Z0-9_]*$"

Это работает для регулярных выражений .NET и, возможно, также и многих других языков.

Разрушение:

^ : start of string
[ : beginning of character group
a-z : any lowercase letter
A-Z : any uppercase letter
0-9 : any digit
_ : underscore
] : end of character group
* : zero or more of the given characters
$ : end of string

Если вы не хотите разрешать пустые строки, используйте + вместо *.

EDIT. Как указывали другие, некоторые языки регулярных выражений имеют сокращенную форму для [a-zA-Z0-9_]. В языке регулярных выражений .NET вы можете включить поведение ECMAScript и использовать \w как сокращенное (получение ^\w*$ или ^\w+$). Обратите внимание, что на других языках и по умолчанию в .NET, \w несколько шире и будет соответствовать другим типам символов юникода (спасибо Ян за это указывает). Поэтому, если вы действительно собираетесь сопоставлять только эти символы, использование явной (более длинной) формы, вероятно, лучше всего.

Ответ 2

Здесь много многословия, и я глубоко против этого, поэтому мой окончательный ответ был бы следующим:

/^\w+$/

\w эквивалентен [A-Za-z0-9_], что в значительной степени зависит от того, что вы хотите. (если мы не вводим unicode в микс)

Используя квантор +, вы будете сопоставлять один или несколько символов. Если вы хотите принять пустую строку, используйте * вместо этого.

Ответ 3

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

[A-Za-z0-9_]

И вы даже можете использовать сокращенную версию:

\w

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

^

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

$

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

\w+ or \w*

Чтобы указать "1 или более", или "0 или более". Соединяя все это, мы имеем:

^\w*$

Ответ 4

Ум... вопрос: Нужно ли иметь хотя бы одного персонажа или нет? Может быть, это пустая строка?

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

Будет делать по крайней мере один верхний или нижний регистр буквенно-цифровой или подчеркивания. Если это может быть нулевая длина, то просто замените + для *

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

Edit:

Если диакритики должны быть включены (например, cedilla - ç), тогда вам нужно будет использовать символ слова, который делает то же самое, что и выше, но включает диакритические символы:

^\w+$

или

^\w*$

Ответ 5

Хотя он более подробный, чем \w, я лично ценю читаемость полных имен классов персонажей POSIX (http://www.zytrax.com/tech/web/regex.htm#special), поэтому я бы сказал:

^[[:alnum:]_]+$

Однако, хотя в документации по указанным выше ссылкам указано, что \w будет "соответствовать любому символу в диапазоне 0 - 9, A - Z и a - z (эквивалент POSIX [: alnum:])", у меня есть не найдено, что это правда. Не с grep -P в любом случае. Вам нужно явно указать подчеркивание, если вы используете [:alnum:], но не используете \w. Вы не можете победить следующего за короткое и сладкое:

^\w+$

Наряду с читабельностью использование классов символов POSIX (http://www.regular-expressions.info/posixbrackets.html) означает, что ваше регулярное выражение может работать с строками, отличными от ASCII, в которых не будут использоваться регулярные выражения на основе диапазона так как они полагаются на базовое упорядочение символов ASCII, которые могут отличаться от других наборов символов, и поэтому исключают некоторые не-ASCII-символы (буквы, такие как œ), которые вы можете захотеть захватить.

Ответ 6

В информатике буквенно-цифровое значение часто означает, что первый символ не является числом, а является алфавитом или подчеркиванием. После этого символ может быть 0-9, A-Z, A-Z или подчеркивание (_).

Вот как вы это сделаете:

Протестировано под php:

$regex = '/^[A-Za-z_][A-Za-z\d_]*$/'

или возьмите это

^[A-Za-z_][A-Za-z\d_]*$

и поместите его на свой язык разработки.

Ответ 7

Как насчет:

^([A-Za-z]|[0-9]|_)+$

... если вы хотите быть явным, или:

^\w+$

... если вы предпочитаете краткий (синтаксис Perl).

Ответ 8

используйте lookaheads для создания "по крайней мере одного" материала. Поверьте мне это намного проще.

Вот пример, который потребует 1-10 символов, содержащих по крайней мере одну цифру и одну букву:

^(?=.*\d)(?=.*[A-Za-z])[A-Za-z0-9]{1,10}$

ПРИМЕЧАНИЕ: возможно, он использовал \w, но затем учитываются соображения ECMA/Unicode, увеличивающие охват символов символа слова \w ".

Ответ 9

Попробуйте эти многоязычные расширения, которые я сделал для строки.

IsAlphaNumeric - Строка должна содержать по крайней мере 1 альфу (букву в диапазоне Юникод, указанную в charSet) и по крайней мере 1 номер (указанный в numSet). Кроме того, строка должна содержать только альфу и числа.

IsAlpha - Строка должна содержать по крайней мере 1 альфа (в указанном языке charSet) и содержать только альфа.

IsNumeric - Строка должна содержать как минимум 1 номер (в указанном языке numSet) и содержать только числа.

Можно указать диапазон charSet/numSet для нужного языка. Диапазоны Unicode доступны по ссылке ниже:

http://www.ssec.wisc.edu/~tomw/java/unicode.html

API:

    public static bool IsAlphaNumeric(this string stringToTest)
    {
        //English
        const string charSet = "a-zA-Z";
        const string numSet = @"0-9";

        //Greek
        //const string charSet = @"\u0388-\u03EF";            
        //const string numSet = @"0-9";

        //Bengali
        //const string charSet = @"\u0985-\u09E3";
        //const string numSet = @"\u09E6-\u09EF";

        //Hindi
        //const string charSet = @"\u0905-\u0963";
        //const string numSet = @"\u0966-\u096F";

        return Regex.Match(stringToTest, @"^(?=[" + numSet + @"]*?[" + charSet + @"]+)(?=[" + charSet + @"]*?[" + numSet + @"]+)[" + charSet + numSet [email protected]"]+$").Success;
    }

    public static bool IsNumeric(this string stringToTest)
    {
        //English
        const string numSet = @"0-9";

        //Hindi
        //const string numSet = @"\u0966-\u096F";

        return Regex.Match(stringToTest, @"^[" + numSet + @"]+$").Success;
    }

    public static bool IsAlpha(this string stringToTest)
    {
        //English
        const string charSet = "a-zA-Z";

        return Regex.Match(stringToTest, @"^[" + charSet + @"]+$").Success;
    }

Использование:

        //English
        string test = "AASD121asf";

        //Greek
        //string test = "Ϡϛβ123";

        //Bengali
        //string test = "শর৩৮";

        //Hindi
        //string test = @"क़लम३७ख़";

        bool isAlphaNum = test.IsAlphaNumeric();

Ответ 10

Следующее регулярное выражение соответствует буквенно-цифровым символам и подчеркиванию:

^[a-zA-Z0-9_]+$

Например, в Perl:

#!/usr/bin/perl -w

my $arg1 = $ARGV[0];

# check that the string contains *only* one or more alphanumeric chars or underscores
if ($arg1 !~ /^[a-zA-Z0-9_]+$/) {
  print "Failed.\n";
} else {
    print "Success.\n";
}

Ответ 11

Для меня была проблема в том, что я хочу различать альфа, числовые и буквенные числа, поэтому для того, чтобы буквенно-цифровая строка содержала по крайней мере одну альфу и по крайней мере одну цифру, я использовал:

^([a-zA-Z_]{1,}\d{1,})+|(\d{1,}[a-zA-Z_]{1,})+$

Ответ 13

Я считаю, что вы не принимаете символы латиницы и Юникода в своих матчах. Например, если вам нужно использовать символы "ã" или "ü", использование "\ w" не сработает.

Вы также можете использовать этот подход:

^[A-ZÀ-Ýa-zà-ý0-9_]+$

Надеюсь, это поможет!

Ответ 14

Вот регулярное выражение для того, что вы хотите с квантификатором, чтобы указать не менее 1 символа и не более 255 символов

[^a-zA-Z0-9 _]{1,255}

Ответ 15

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

Ответ 16

Чтобы проверить всю строку и не разрешать пустые строки, попробуйте

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

Ответ 17

это работает для меня, вы можете попробовать

[\\p{Alnum}_]

Ответ 18

^\w*$ будет работать для следующих комбинаций

1
123
1av
pRo
av1