Expressão Regular para Alfanuméricos e Sublinhados

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