Regex, todos os caracteres não alfanuméricos, exceto espaços em branco ou dois pontos

131

Como posso fazer este em qualquer lugar?

Basicamente, estou tentando corresponder a todos os tipos de caracteres diversos, como e comercial, ponto e vírgula, cifrões etc.

Ryan Ward
fonte
13
/[^a-zA-Z0-9\s\:]*/
1955 Kelly

Respostas:

246
[^a-zA-Z\d\s:]
  • \ d - classe numérica
  • \ s - espaço em branco
  • a-zA-Z - corresponde a todas as letras
  • ^ - nega todos eles - para que você obtenha - caracteres não numéricos, espaços e dois pontos
Tudor Constantin
fonte
Isso é o que eu estava olhando também :)) - Eu tenho que promover a sua resposta perfeita
Tudor Constantin
6
A única coisa que descobri é que isso remove caracteres especiais como é ou ã. Eu preferiria [^ \ w \ d \ s:].
Eric Belair
5
Diminuiu o voto porque isso não captura caracteres não latinos, nem caracteres latinos "especiais".
Damian
\de \ssão extensões Perl que normalmente não são suportados por ferramentas mais antigas, como grep, sed, tr, lex, etc.
tripleee
38

Isso deve servir:

[^a-zA-Z\d\s:]
Luke Sneeringer
fonte
1
O restante verifica se há espaço, mas não em branco, ou tem a negação no local errado para realmente negar.
Zachary Scott
\ w também mostra sublinhados - que é um caracter não alfanumérico
Tudor Constantin
Aha! Vou modificar - não sabia disso. Espero que funcione de maneira diferente para diferentes mecanismos, mas também pode dar ao OP a resposta segura.
Luke Sneeringer
2
Diminuiu o voto porque isso não captura caracteres não latinos, nem caracteres latinos "especiais".
Damian
16

Se você deseja tratar caracteres latinos acentuados (por exemplo, à Ñ) como letras normais (evite correspondê-los também), também precisará incluir o intervalo Unicode apropriado ( \ u00C0- \ u00FF ) em seu regex, para que ficaria assim:

/[^a-zA-Z\d\s:\u00C0-\u00FF]/g
  • ^ nega o que se segue
  • a-zA-Z combina letras maiúsculas e minúsculas
  • \d corresponde a dígitos
  • \s corresponde ao espaço em branco (se você quiser corresponder apenas a espaços, substitua-o por um espaço)
  • : corresponde a dois pontos
  • \u00C0-\u00FF corresponde ao intervalo Unicode para caracteres latinos acentuados.

nb. A correspondência de intervalo Unicode pode não funcionar para todos os mecanismos de expressão regular , mas o acima certamente funciona em Javascript (como visto nesta caneta no Codepen).

nb2. Se você não estiver preocupado com a correspondência de sublinhados, substitua-o a-zA-Z\dpor \w, que corresponde a letras, dígitos e sublinhados.

Nick F
fonte
Esta gama contém alguns caracteres que não são alfanuméricos (U + 00D7 e U + 00F7) e exclui um monte de caracteres acentuados válidos de idiomas não-ocidentais, como polonês, tcheco, vietnamita etc.
tripleee
1
Voto positivo para a descrição de cada parte do RegEx.
Morajabi 9/12/19
14

Tente o seguinte:

[^a-zA-Z0-9 :]

Exemplo de JavaScript:

"!@#$%* ABC def:123".replace(/[^a-zA-Z0-9 :]/g, ".")

Veja um exemplo online:

http://jsfiddle.net/vhMy8/

Topera
fonte
3
Diminuiu o voto porque isso não captura caracteres não latinos, nem caracteres latinos "especiais".
Damian
14
É fácil votar em uma resposta e ainda mais difícil fornecer informações construtivas ao quadro, por exemplo, como é que se pega caracteres não latinos, nem caracteres latinos "especiais"? Até agora, você votou 3 respostas pelo mesmo motivo e, na minha opinião, por um pequeno ajuste. Por exemplo, estou aqui para encontrar uma regex para exatamente o que é discutido nessas respostas. Não ligo para conjuntos de caracteres que não serão usados ​​no meu aplicativo. Lei dos rendimentos decrescentes.
Aaron pode ser um "pequeno ajuste" para um cidadão dos EUA, mas altamente relevante para ... o resto deste planeta.
Michael K. Borregaard 17/03
4

Nenhum espaço alfanumérico, em branco ou '_'.

var reg = /[^\w\s)]|[_]/g;
Vasyl Gutnyk
fonte
4

Se você quer dizer "caracteres não alfanuméricos", tente usar o seguinte:

var reg =/[^a-zA-Z0-9]/g      //[^abc]
Kim-Trinh
fonte
1

Esse regex funciona para C # , PCRE e Go, para citar alguns.

Não funciona para JavaScript no Chrome, pelo que diz o RegexBuddy . Mas já existe um exemplo para isso aqui.

Esta parte principal disso é:

\p{L}

que representa \p{L}ou \p{Letter}qualquer tipo de letra de qualquer idioma.`


A regex completa em si: [^\w\d\s:\p{L}]

Exemplo: https://regex101.com/r/K59PrA/2

Ste
fonte
Esta é a única resposta aqui que lida corretamente com os alfabéticos acentuados Unicode de maneira adequada. Infelizmente, nem todos os mecanismos regex suportam esse recurso (até o Python não possui, a partir do 3.8, embora seu mecanismo regex seja ostensivamente baseado em PCRE).
Tripleee 6/12/19
1
Vou remover o Python da resposta, pensei ter testado isso, mas aparentemente não. Obrigado por apontar isso.
#
0

Tente adicionar isto:

^[^a-zA-Z\d\s:]*$

Isso tem funcionado para mim... :)

Er Parthu
fonte
Isso parece repetir a resposta aceita de 2011. As âncoras ^e o $limitam para corresponder a linhas inteiras e o *quantificador significa que também corresponde a linhas vazias.
Tripleee 6/12/19
0

Em JavaScript:

/[^\w_]/g

^negação, ou seja, selecione qualquer coisa que não esteja no conjunto a seguir

\w qualquer caractere de palavra (ou seja, qualquer caractere alfanumérico, mais sublinhado)

_ negar o sublinhado, pois é considerado um caractere de 'palavra'

Exemplo de uso - const nonAlphaNumericChars = /[^\w_]/g;

Chris Halcrow
fonte