Я хотел бы иметь регулярное выражение, которое проверяет, содержит ли строка только верхние и строчные буквы, цифры и символы подчеркивания.
Регулярное выражение для буквенно-цифровых и подчеркиваний
Ответ 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,})+$
Ответ 12
Для тех, кто ищет алфавитно-цифровое сопоставление в формате Юникод, вы можете сделать что-то вроде:
^[\p{L} \p{Nd}_]+$
Дальнейшее чтение на http://unicode.org/reports/tr18/ и в http://www.regular-expressions.info/unicode.html
Ответ 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