Я хотел бы иметь регулярное выражение, которое проверяет, содержит ли строка только прописные и строчные буквы, цифры и знаки подчеркивания.
Чтобы найти строку, которая содержит только эти символы (или пустую строку), попробуйте
"^[a-zA-Z0-9_]*$"
Это работает для .Чистая регулярные выражения, и, вероятно, множество других языков.
Разбив его вниз:
^ : 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
Если вы Don'т хотите разрешить пустые строки, использовать + вместо *.
Редактировать как уже отмечалось, некоторые регулярные выражения языки имеют краткой формы [а-Яа-З0-9_]
. В .Net-язык регулярных выражений, вы можете включить в ECMAScript поведения и использовать \W
и как сокращенное (при ^\Ж*$
или ^\Ш+$
). Обратите внимание, что в других языках, и по умолчанию .Чистая, `\W-это несколько шире, и будет соответствовать другие виды символов Unicode, а также (Спасибо Яну за указание на это). Так что, если вы'вновь действительно намереваясь матч только те символы, с помощью явного (дольше) форма все-таки лучше.
Там's большое многословие здесь, и я'м глубоко против этого, так что мой окончательный ответ будет:
/^\w+$/
ж \
эквивалентно [а-Яа-З0-9_]
, который является в значительной степени то, что вы хотите. (если мы введем Юникод в смесь)
Используя кнопки +
Квантор вы'МР соответствовать один или более символов. Если вы тоже хотите принять пустой строкой, использовать *
вместо этого.
Вы хотите проверить, что каждый символ соответствует вашим требованиям, именно поэтому мы используем:
[A-Za-z0-9_]
И вы даже можете использовать сокращенный вариант:
\w
Что эквивалентно (в некоторых тестирую ароматы, поэтому убедитесь, что вы проверить, прежде чем использовать его). Затем, чтобы показать, что все строки должны совпадать, вы используете:
^
Для указания строки должны начинаться с этого символа, а затем использовать
$
Чтобы указать строку, необходимо покончить с этим персонажем. Затем используйте
\w+ or \w*
Чтобы указать на "1 или более", или "0 или более". Собирая все вместе, мы имеем:
^\w*$
Хотя это's больше, чем многословный \б
, лично я ценю читабельность полное имя класса символов POSIX ( http://www.zytrax.com/tech/web/regex.htm#special ), поэтому я'д сказать:
^[[:alnum:]_]+$
Однако, хотя в документации по ссылкам выше говорится, что \W
и будет "и соответствует любому символу в диапазоне 0 - 9, а - Z и А - Z (эквивалент стандарта POSIX [:alnum:])" Ну, я не нашел этот, чтобы быть правдой. Не с Команда grep -П
в любом случае. Вы должны явно включить подчеркнуть, если вы используете [:alnum:] - но не если вы используете
\ж`. Вы можете'т бить следующий за коротким и сладким:
^\w+$
Вместе с читабельностью, используя POSIX и классов персонажей (http://www.regular-expressions.info/posixbrackets.html) означает, что регулярное выражение может работать на не строки ASCII, которое на основе регулярных выражений выиграл'т делать, так как они опираются на основной заказ из символов ASCII, которые могут отличаться от Другие наборы символов и, следовательно, исключить некоторые не-ASCII символы (буквы, такие как œ), которые вы, возможно, захотите, чтобы захватить.
Эм... вопрос: Должен ли он содержать хотя бы один символ или нет? Может ли это быть пустая строка?
^[A-Za-z0-9_]+$
Будет содержать хотя бы один буквенно-цифровой символ верхнего или нижнего регистра или знак подчеркивания. Если длина строки может быть нулевой, то просто замените + на *.
^[A-Za-z0-9_]*$
Редактировать:
Если необходимо включить диакритические знаки (например, cedilla - ç), то нужно использовать слово-символ, которое делает то же самое, что и выше, но включает диакритические знаки:
^\w+$
Или
^\w*$
В информатике, буквенно-цифровое значение часто означает первый символ не является числом, а представляет собой алфавита или знака подчеркивания. После этого персонаж может быть 0-9
, а-я
, а-я
, или знак подчеркивания (_
).
Вот как вы могли бы сделать это:
Тестировано на PHP:
$regex = '/^[A-Za-z_][A-Za-z\d_]*$/'
или взять этот
^[A-Za-z_][A-Za-z\d_]*$
и разместить его на вашем языке развития.
использовать заглядывание вперед, чтобы сделать "по крайней мере одно" и прочее. Поверь мне, это'ы гораздо легче.
Здесь'ы пример, который потребует 1-10 символов, содержащий как минимум одну цифру и одну букву:
^(?=.*\d)(?=.*[A-Za-z])[A-Za-z0-9]{1,10}$
Примечание: мог бы использовать \W а потом ЕСМА/Юникод соображения вступают в игру увеличение охвата характера \Ш "и слова" по.
Попробуйте эти мульти-язычная расширения я сделал для строки.
IsAlphaNumeric - строка должна содержать по крайней мере 1 Альфа (буква в диапазон Юникода, указанных в кодировку) и хотяб 1 номер (указанный в numSet). Кроме того, строка должна состоять только из альфа и цифры.
IsAlpha - строка должна содержать по крайней мере 1 Альфа (на указанном языке символов) и состоять только из Альфы.
Статистика - строка должна содержать по крайней мере указано 1 число (на языке numSet) и состоят только из цифр.
Диапазон символов/numSet на нужный язык может быть указан. Диапазоны Юникода доступны по ссылке ниже:
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 +@"]+$").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();
Следующее выражение соответствует алфавитно-цифровым символам и символам подчеркивания:
^[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";
}
Для меня была проблема в том, что я хочу, чтобы различать буквы, цифры и Альфа-числовых, так, чтобы обеспечить буквенно-цифровая строка содержит по крайней мере один альфа и по меньшей мере одну цифру, я использовал :
^([a-zA-Z_]{1,}\d{1,})+|(\d{1,}[a-zA-Z_]{1,})+$
Вот регулярное выражение, что вы хотите с квантором указать как минимум 1 символ и не более 255 символов
[^a-zA-Z0-9 _]{1,255}
Для тех, кто ищет буквенно-числового соответствия с Unicode, вы могли бы хотеть сделать что-то вроде:
^[\p{L} \p{Nd}_]+$
Дополнительная литература по http://unicode.org/reports/tr18/ и в http://www.regular-expressions.info/unicode.html
Я считаю, что вы не принимаете латинские и символы в ваши матчи. Например, если вам нужно примешь "ã" или "ü" и символы, использовать " и\ж на" выиграл'т работу.
Вы можете также использовать этот подход:
^[A-ZÀ-Ýa-zà-ý0-9_]+$
Надеюсь, что это помогает!
Чтобы проверить всю строку и не допускает пустых строк, попробуйте
^[A-Za-z0-9_]+$
это работает для меня, вы можете попробовать
[\\p{Alnum}_]
^\ж*$
будет работать для следующих комбинаций
1 123 1ав про АВ1