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.
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.
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.
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.
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;
/[^a-zA-Z0-9\s\:]*/
Respostas:
fonte
\d
e\s
são extensões Perl que normalmente não são suportados por ferramentas mais antigas, comogrep
,sed
,tr
,lex
, etc.Isso deve servir:
fonte
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:
^
nega o que se seguea-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\d
por\w
, que corresponde a letras, dígitos e sublinhados.fonte
Tente o seguinte:
Exemplo de JavaScript:
Veja um exemplo online:
http://jsfiddle.net/vhMy8/
fonte
Nenhum espaço alfanumérico, em branco ou '_'.
fonte
Se você quer dizer "caracteres não alfanuméricos", tente usar o seguinte:
fonte
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
fonte
Tente adicionar isto:
Isso tem funcionado para mim... :)
fonte
^
e o$
limitam para corresponder a linhas inteiras e o*
quantificador significa que também corresponde a linhas vazias.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;
fonte