Regex, todos los caracteres no alfanuméricos, excepto los espacios en blanco o los dos puntos

131

¿Cómo puedo hacer esto en cualquier lugar?

Básicamente, estoy tratando de hacer coincidir todo tipo de caracteres misceláneos, como signos de unión, punto y coma, signos de dólar, etc.

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

Respuestas:

246
[^a-zA-Z\d\s:]
  • \ d - clase numérica
  • \ s - espacio en blanco
  • a-zA-Z: coincide con todas las letras
  • ^ - los niega a todos - para que obtenga - caracteres no numéricos, no espacios y no dos puntos
Tudor Constantin
fuente
Eso es lo que estaba mirando también :)) - Tengo que promover su respuesta perfecta
Tudor Constantin
66
Lo único que encontré es que esto elimina caracteres especiales como é o ã. Preferiría [^ \ w \ d \ s:].
Eric Belair
55
Votaron a favor porque esto no capturará caracteres no latinos, ni caracteres latinos "especiales".
Damian
\dy \sson extensiones de Perl que por lo general no son compatibles con las herramientas más antiguos, como grep, sed, tr, lex, etc.
tripleee
38

Esto debería hacerlo:

[^a-zA-Z\d\s:]
Luke Sneeringer
fuente
1
El resto busca espacio pero no espacios en blanco o tiene la negación en el lugar equivocado para negar realmente.
Zachary Scott,
\ w también pone de relieve los caracteres de subrayado, que es un carácter no alfanumérico
Tudor Constantin
¡Ajá! Voy a modificar, no lo sabía. Espero que funcione de manera diferente para diferentes motores, pero también podría darle al OP la respuesta segura.
Luke Sneeringer
2
Votaron a favor porque esto no capturará caracteres no latinos, ni caracteres latinos "especiales".
Damian
16

Si desea tratar los caracteres latinos acentuados (p. Ej. À Ñ) como letras normales (es decir, evite combinarlos también), también deberá incluir el rango Unicode apropiado ( \ u00C0- \ u00FF ) en su expresión regular, por lo que se vería así:

/[^a-zA-Z\d\s:\u00C0-\u00FF]/g
  • ^ niega lo que sigue
  • a-zA-Z coincide con letras mayúsculas y minúsculas
  • \d coincide con dígitos
  • \s coincide con el espacio en blanco (si solo desea unir espacios, reemplácelo con un espacio)
  • : coincide con un colon
  • \u00C0-\u00FF coincide con el rango Unicode para caracteres latinos acentuados.

nótese bien. La coincidencia de rango Unicode podría no funcionar para todos los motores regex, pero lo anterior ciertamente funciona en Javascript (como se ve en este bolígrafo en Codepen).

nb2. Si no le preocupa que coincidan los guiones bajos, puede reemplazarlos a-zA-Z\dcon \wletras, dígitos y guiones bajos.

Nick F
fuente
Esta gama contiene algunos caracteres que no sean alfanuméricos (U + 00D7 y U + 00F7), y excluye una gran cantidad de caracteres acentuados válidos de idiomas no occidentales como el polaco, checo, vietnamita, etc.
tripleee
1
Votó a favor de la descripción de cada parte de la RegEx.
morajabi
14

Prueba esto:

[^a-zA-Z0-9 :]

Ejemplo de JavaScript:

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

Vea un ejemplo en línea:

http://jsfiddle.net/vhMy8/

Topera
fuente
3
Votaron a favor porque esto no capturará caracteres no latinos, ni caracteres latinos "especiales".
Damian
14
Es fácil rechazar una respuesta y, sin embargo, es más difícil proporcionar información constructiva a la pizarra, por ejemplo, ¿cómo se capturan caracteres no latinos, ni caracteres latinos "especiales"? A partir de mi recuento hasta aquí, ha votado 3 respuestas por la misma razón y, en mi opinión, por un pequeño cambio. Por ejemplo, estoy aquí para encontrar una expresión regular para exactamente lo que se discute en estas respuestas. No me importan los conjuntos de caracteres que no se utilizarán en mi aplicación. Ley de los rendimientos decrecientes.
Aaron podría ser un "pequeño retoque" para un ciudadano estadounidense, pero muy relevante para ... el resto de este planeta.
Michael K. Borregaard
4

Sin alfanuméricos, espacios en blanco o '_'.

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

Si quiere decir "caracteres no alfanuméricos", intente usar esto:

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

Esta expresión regular funciona para C # , PCRE y Go, por nombrar algunos.

No funciona para JavaScript en Chrome de lo que dice RegexBuddy . Pero ya hay un ejemplo para eso aquí.

Esta parte principal de esto es:

\p{L}

que representa \p{L}o \p{Letter}cualquier tipo de letra de cualquier idioma.


La expresión regular completa en sí: [^\w\d\s:\p{L}]

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

Ste
fuente
Esta es la única respuesta aquí que trata correctamente con los alfabéticos acentuados Unicode de manera adecuada. Lamentablemente, no todos los motores regex admiten esta función (incluso Python carece de ella, a partir de 3.8, a pesar de que su motor regex está aparentemente basado en PCRE).
tripleee
1
Eliminaré Python de la respuesta, pensé que lo probé pero aparentemente no. Gracias por señalar eso.
Ste.
0

Intenta agregar esto:

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

Esto me ha funcionado ... :)

Er Parthu
fuente
Esto parece repetir la respuesta aceptada de 2011. Los anclajes ^y lo $confinan para que coincida con líneas enteras y el *cuantificador significa que también coincide con líneas vacías.
tripleee
0

En JavaScript:

/[^\w_]/g

^negación, es decir, seleccione cualquier cosa que no esté en el siguiente conjunto

\w cualquier carácter de palabra (es decir, cualquier carácter alfanumérico, más subrayado)

_ niega el guión bajo, ya que se considera un carácter de "palabra"

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

Chris Halcrow
fuente