Eu gostaria de ter uma expressão regular que verifica se uma string contém apenas letras maiúsculas e minúsculas, números e sublinhados.
Para corresponder uma string que contenha apenas esses caracteres (ou uma string vazia), tente
"^[a-zA-Z0-9_]*$"
Isso funciona para expressões regulares .NET e, provavelmente, também para muitas outras linguagens.
Quebrando:
^ : start of string [ : beginning of character group az : any lowercase letter AZ : any uppercase letter 0-9 : any digit _ : underscore ] : end of character group * : zero or more of the given characters $ : end of string
Se você não quiser permitir sequências vazias, use + em vez de *.
EDITAR Como outros apontaram, algumas linguagens regex têm um formato abreviado para [a-zA-Z0-9_]
. Na linguagem regex do .NET, você pode ativar o comportamento do ECMAScript e usar \w
como abreviação (rendendo ^\w*$
ou ^\w+$
). Note que em outras linguagens, e por padrão no .NET, \w
é um pouco mais amplo, e também irá combinar com outros tipos de caracteres unicode (obrigado a Jan por apontar isto). Então, se você realmente pretende combinar apenas esses caracteres, usar o formulário explícito (mais longo) é provavelmente o melhor.
Há muita verbosidade aqui, e eu sou profundamente contra isso, então, minha resposta conclusiva seria:
/^\w+$/
\w
é equivalente a [A-Za-z0-9_]
, que é praticamente o que você deseja. (a menos que introduzamos unicode ao mix)
Usando o quantificador +
você corresponderá a um ou mais caracteres. Se você quiser aceitar uma string vazia também, use *
lugar.
Você quer verificar se cada personagem corresponde aos seus requisitos, e é por isso que usamos:
[A-Za-z0-9_]
E você pode até usar a versão abreviada:
\w
Qual é o equivalente (em alguns sabores de regex, por isso certifique-se de verificar antes de usá-lo). Em seguida, para indicar que a string inteira deve corresponder, use:
^
Para indicar que a string deve começar com esse caractere, use
$
Para indicar que a cadeia deve terminar com esse caractere. Então use
\w+ or \w*
Para indicar “1 ou mais” ou “0 ou mais”. Juntando tudo, nós temos:
^\w*$
Embora seja mais detalhado que \w
, eu pessoalmente aprecio a legibilidade dos nomes completos das classs de caracteres POSIX ( http://www.zytrax.com/tech/web/regex.htm#special ), então eu diria:
^[[:alnum:]_]+$
No entanto, enquanto a documentação nos links acima afirma que \w
irá “Corresponder a qualquer caractere no intervalo 0 – 9, A – Z e a – z (equivalente a POSIX [: alnum:])”, eu não encontrei isso para seja verdadeiro. Não com grep -P
qualquer maneira. Você precisa include explicitamente o sublinhado se usar [:alnum:]
mas não se você usar \w
. Você não pode bater o seguinte para curto e doce:
^\w+$
Juntamente com a legibilidade, o uso das classs de caracteres POSIX ( http://www.regular-expressions.info/posixbrackets.html ) significa que seu regex pode funcionar em strings não ASCII, o que as regexes baseadas em intervalos não farão, pois dependem de a ordenação subjacente dos caracteres ASCII que pode ser diferente de outros conjuntos de caracteres e, portanto, excluirá alguns caracteres não-ASCII (letras como œ) que você pode querer capturar.
Um … pergunta: Precisa ter pelo menos um personagem ou não? Pode ser uma string vazia?
^[A-Za-z0-9_]+$
Fará pelo menos um caractere alfanumérico ou sublinhado em maiúsculas ou minúsculas. Se ele pode ser de comprimento zero, basta replace o + para *
^[A-Za-z0-9_]*$
Editar:
Se diacríticos precisam ser incluídos (como cedilha – ç), então você precisaria usar o caractere de palavra que faz o mesmo que o acima, mas inclui os caracteres diacríticos:
^\w+$
Ou
^\w*$
Em Ciência da Computação, um valor Alfanumérico geralmente significa que o primeiro caractere não é um número, mas é um alfabeto ou sublinhado. Posteriormente, o caractere pode ser 0-9
, AZ
, az
ou sublinhado ( _
).
Aqui está como você faria isso:
Testado sob php:
$regex = '/^[A-Za-z_][A-Za-z\d_]*$/'
ou pegue isso
^[A-Za-z_][A-Za-z\d_]*$
e coloque-o na sua linguagem de desenvolvimento.
E se:
^([A-Za-z]|[0-9]|_)+$
… se você quiser ser explícito ou:
^\w+$
… se você preferir conciso (syntax Perl).
use lookaheads para fazer o “pelo menos um”. Confie em mim, é muito mais fácil.
Aqui está um exemplo que requereria de 1 a 10 caracteres, contendo pelo menos um dígito e uma letra:
^(?=.*\d)(?=.*[A-Za-z])[A-Za-z0-9]{1,10}$
NOTA: poderia ter usado \ w, mas as considerações do ECMA / Unicode entram em ação aumentando a cobertura de caracteres do \ w “caractere de palavra”.
Experimente estas extensões multilíngües que fiz para string.
IsAlphaNumeric – A string deve conter pelo menos 1 alfa (letra no intervalo Unicode, especificado em charSet) e pelo menos 1 número (especificado em numSet). Além disso, a string deve ser composta apenas por alfa e números.
IsAlpha – String deve conter pelo menos 1 alpha (na linguagem charSet especificada) e é composto apenas por alpha.
IsNumeric – A string deve conter pelo menos um número (na linguagem numSet especificada) e é composta apenas por números.
O intervalo charSet / numSet para o idioma desejado pode ser especificado. Os intervalos Unicode estão disponíveis no link abaixo:
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; }
Uso:
//English string test = "AASD121asf"; //Greek //string test = "Ϡϛβ123"; //Bengali //string test = "শর৩৮"; //Hindi //string test = @"क़लम३७ख़"; bool isAlphaNum = test.IsAlphaNumeric();
A regex a seguir corresponde a caracteres alfanuméricos e sublinhados:
^[a-zA-Z0-9_]+$
Por exemplo, em Perl:
#!/usr/bin/perl -w my $arg1 = $ARGV[0]; # check that the string contains *only* one or more alphanumeric chars or underscolors if ($arg1 !~ /^[a-zA-Z0-9_]+$/) { print "Failed.\n"; } else { print "Success.\n"; }
Para mim, houve um problema em que quero distinguir entre alfa, numérica e alfanumérica, portanto, para garantir que uma string alfanumérica contenha pelo menos um alfa e pelo menos um numérico, usei:
^([a-zA-Z_]{1,}\d{1,})+|(\d{1,}[a-zA-Z_]{1,})+$
Para aqueles que estão procurando correspondência alfanumérica unicode, você pode querer fazer algo como:
^[\p{L} \p{Nd}_]+$
Leia mais em http://unicode.org/reports/tr18/ e em http://www.regular-expressions.info/unicode.html
Aqui está o regex para o que você quer com um quantificador para especificar pelo menos 1 caractere e não mais de 255 caracteres
[^ a-zA-Z0-9 _] {1,255}
Os diacríticos correspondentes em um regexp abrem uma lata inteira de worms, especialmente ao levar o Unicode em consideração. Você pode querer ler sobre localidades Posix em particular.
Para verificar toda a string e não permitir strings vazias, tente
^[A-Za-z0-9_]+$
isso funciona para mim, você pode tentar [\ p {Alnum} _]
^ \ w * $ irá funcionar para a combinação abaixo 1 123 1av pRo av1