2011-03-08 4 views
9

Como puedo pelar puntuacion excepción de estos personajes .=$'-%cómo tira puntuacion en php

+2

¿Qué quieres decir? Por favor agregue más detalles y ejemplos. –

+0

Probablemente sea más fácil simplemente mantener los caracteres que desee. ¿Desea mantener a-z (superior e inferior) 0-9 y los caracteres que ha enumerado? Además, ¿qué es "phpr"? –

+0

@middaparka Es una nueva colaboración entre PHP y [R] (http://en.wikipedia.org/wiki/R_%28programming_language%29) :) – alex

Respuesta

16

Ya que se necesita para que coincida con algunos caracteres Unicode () sería sensato usa una expresión regular El patrón coincide con cualquier \p{P} puntuacion conocido, y la afirmación excluye los caracteres especiales deseados a partir de fuga:

$text = preg_replace("/(?![.=$'€%-])\p{P}/u", "", $text); 
+0

¿Puedes explicar este patrón? Soy un novato en PCRE, y es la primera vez que veo un '(?!)' Que no es un vistazo, o algo que simplemente no entiendo. Además, no entiendo '\ p {P}' – AlexanderMP

+1

@AlexanderMP: la aserción negativa 'lookahead' (?! ...) 'se explica mejor aquí: http://www.regular-expressions.info/lookaround. html - Y el '\ p {P}' es algo críptico, pero también hay una buena visión general allí: http://www.regular-expressions.info/unicode.html – mario

+0

Esto no elimina los caracteres '''. – mopsyd

1
preg_replace("[^-\w\d\s\.=$'€%]",'',$subject) 

aunque sería más correcto y fácil para especificar los caracteres que se quieren eliminar, en vez de caracteres (de un conjunto desconocido) que no desea pelar.

+0

No tiene que escapar '$' dentro de una clase de caracteres, pero AFAIK '-' debe ser el primero o el último elemento. – ThiefMaster

+0

Podría ser. Me siento más cómodo al escapar de todos los caracteres especiales que se utilizan en PCRE. Pero gracias por la pista. – AlexanderMP

6
<? 
$whatToStrip = array("?","!",",",";"); // Add what you want to strip in this array 
$test = "Hi! Am I here?"; 
echo $test."\n\n"; 
echo str_replace($whatToStrip, "", $test); 

Demo here

o, por supuesto, más corto:

$test = str_replace(array("?","!",",",";"), "", $test); 

Source from 1st example of str_replace manual

0

Probar:

preg_replace("/[^\w-\p{L}\p{N}\p{Pd}\$\.€%']/", "", 'YOUR DATA');

Usted no ha mencionado si quería o no espacios, para que la voluntad tira eso también.

0

El problema:

necesidad de ahorrar cadena como ALPHANUM con puntuacion específica y no quieren descartar por completo con caracteres puntuacion especial.

la solución:

class ClassName { 

    protected static $cleanChars = array(
    '&lt;' => '', '&gt;' => '', '&#039;' => '', '&amp;' => '', 
    '&quot;' => '', 'À' => 'A', 'Á' => 'A', 'Â' => 'A', 'Ã' => 'A', 'Ä' => 'Ae', 
    '&Auml;' => 'A', 'Å' => 'A', 'Ā' => 'A', 'Ą' => 'A', 'Ă' => 'A', 'Æ' => 'Ae', 
    'Ç' => 'C', 'Ć' => 'C', 'Č' => 'C', 'Ĉ' => 'C', 'Ċ' => 'C', 'Ď' => 'D', 'Đ' => 'D', 
    'Ð' => 'D', 'È' => 'E', 'É' => 'E', 'Ê' => 'E', 'Ë' => 'E', 'Ē' => 'E', 
    'Ę' => 'E', 'Ě' => 'E', 'Ĕ' => 'E', 'Ė' => 'E', 'Ĝ' => 'G', 'Ğ' => 'G', 
    'Ġ' => 'G', 'Ģ' => 'G', 'Ĥ' => 'H', 'Ħ' => 'H', 'Ì' => 'I', 'Í' => 'I', 
    'Î' => 'I', 'Ï' => 'I', 'Ī' => 'I', 'Ĩ' => 'I', 'Ĭ' => 'I', 'Į' => 'I', 
    'İ' => 'I', 'IJ' => 'IJ', 'Ĵ' => 'J', 'Ķ' => 'K','Ł' => 'K', 'Ľ' => 'K', 
    'Ĺ' => 'K', 'Ļ' => 'K', 'Ŀ' => 'K', 'Ñ' => 'N', 'Ń' => 'N', 'Ň' => 'N', 
    'Ņ' => 'N', 'Ŋ' => 'N', 'Ò' => 'O', 'Ó' => 'O', 'Ô' => 'O', 'Õ' => 'O', 
    'Ö' => 'Oe', '&Ouml;' => 'Oe', 'Ø' => 'O', 'Ō' => 'O', 'Ő' => 'O', 'Ŏ' => 'O', 
    'Œ' => 'OE', 'Ŕ' => 'R', 'Ř' => 'R', 'Ŗ' => 'R', 'Ś' => 'S', 'Š' => 'S', 
    'Ş' => 'S', 'Ŝ' => 'S', 'Ș' => 'S', 'Ť' => 'T', 'Ţ' => 'T', 'Ŧ' => 'T', 
    'Ț' => 'T', 'Ù' => 'U', 'Ú' => 'U', 'Û' => 'U', 'Ü' => 'Ue', 'Ū' => 'U', 
    '&Uuml;' => 'Ue', 'Ů' => 'U', 'Ű' => 'U', 'Ŭ' => 'U', 'Ũ' => 'U', 'Ų' => 'U', 
    'Ŵ' => 'W', 'Ý' => 'Y', 'Ŷ' => 'Y', 'Ÿ' => 'Y', 'Ź' => 'Z', 'Ž' => 'Z', 
    'Ż' => 'Z', 'Þ' => 'T', 'à' => 'a', 'á' => 'a', 'â' => 'a', 'ã' => 'a', 
    'ä' => 'ae', '&auml;' => 'ae', 'å' => 'a', 'ā' => 'a', 'ą' => 'a', 'ă' => 'a', 
    'æ' => 'ae', 'ç' => 'c', 'ć' => 'c', 'č' => 'c', 'ĉ' => 'c', 'ċ' => 'c', 
    'ď' => 'd', 'đ' => 'd', 'ð' => 'd', 'è' => 'e', 'é' => 'e', 'ê' => 'e', 
    'ë' => 'e', 'ē' => 'e', 'ę' => 'e', 'ě' => 'e', 'ĕ' => 'e', 'ė' => 'e', 
    'ƒ' => 'f', 'ĝ' => 'g', 'ğ' => 'g', 'ġ' => 'g', 'ģ' => 'g', 'ĥ' => 'h', 
    'ħ' => 'h', 'ì' => 'i', 'í' => 'i', 'î' => 'i', 'ï' => 'i', 'ī' => 'i', 
    'ĩ' => 'i', 'ĭ' => 'i', 'į' => 'i', 'ı' => 'i', 'ij' => 'ij', 'ĵ' => 'j', 
    'ķ' => 'k', 'ĸ' => 'k', 'ł' => 'l', 'ľ' => 'l', 'ĺ' => 'l', 'ļ' => 'l', 
    'ŀ' => 'l', 'ñ' => 'n', 'ń' => 'n', 'ň' => 'n', 'ņ' => 'n', 'ʼn' => 'n', 
    'ŋ' => 'n', 'ò' => 'o', 'ó' => 'o', 'ô' => 'o', 'õ' => 'o', 'ö' => 'oe', 
    '&ouml;' => 'oe', 'ø' => 'o', 'ō' => 'o', 'ő' => 'o', 'ŏ' => 'o', 'œ' => 'oe', 
    'ŕ' => 'r', 'ř' => 'r', 'ŗ' => 'r', 'š' => 's', 'ù' => 'u', 'ú' => 'u', 
    'û' => 'u', 'ü' => 'ue', 'ū' => 'u', '&uuml;' => 'ue', 'ů' => 'u', 'ű' => 'u', 
    'ŭ' => 'u', 'ũ' => 'u', 'ų' => 'u', 'ŵ' => 'w', 'ý' => 'y', 'ÿ' => 'y', 
    'ŷ' => 'y', 'ž' => 'z', 'ż' => 'z', 'ź' => 'z', 'þ' => 't', 'ß' => 'ss', 
    'ſ' => 'ss', 'ый' => 'iy', 'А' => 'A', 'Б' => 'B', 'В' => 'V', 'Г' => 'G', 
    'Д' => 'D', 'Е' => 'E', 'Ё' => 'YO', 'Ж' => 'ZH', 'З' => 'Z', 'И' => 'I', 
    'Й' => 'Y', 'К' => 'K', 'Л' => 'L', 'М' => 'M', 'Н' => 'N', 'О' => 'O', 
    'П' => 'P', 'Р' => 'R', 'С' => 'S', 'Т' => 'T', 'У' => 'U', 'Ф' => 'F', 
    'Х' => 'H', 'Ц' => 'C', 'Ч' => 'CH', 'Ш' => 'SH', 'Щ' => 'SCH', 'Ъ' => '', 
    'Ы' => 'Y', 'Ь' => '', 'Э' => 'E', 'Ю' => 'YU', 'Я' => 'YA', 'а' => 'a', 
    'б' => 'b', 'в' => 'v', 'г' => 'g', 'д' => 'd', 'е' => 'e', 'ё' => 'yo', 
    'ж' => 'zh', 'з' => 'z', 'и' => 'i', 'й' => 'y', 'к' => 'k', 'л' => 'l', 
    'м' => 'm', 'н' => 'n', 'о' => 'o', 'п' => 'p', 'р' => 'r', 'с' => 's', 
    'т' => 't', 'у' => 'u', 'ф' => 'f', 'х' => 'h', 'ц' => 'c', 'ч' => 'ch', 
    'ш' => 'sh', 'щ' => 'sch', 'ъ' => '', 'ы' => 'y', 'ь' => '', 'э' => 'e', 
    'ю' => 'yu', 'я' => 'ya' 
); 

    public static function clean($string, $allowed=array(), $base="a-zA-Z0-9 "){ 
    if(empty($allowed) && !$base){ return false; } 
    $ignore = ""; 
    if(is_array($allowed)){ 
     foreach($allowed as $a){ 
     $ignore .= preg_quote($a); 
     } 
    } 
    return preg_replace("/[^{$base}{$ignore}\s]/", "", $string); 
    } 

    public static function alphaNum($string, $allowed=array(), $convert=false){ 
    if($convert){ 
     $string = strtr($string, self::$cleanChars); 
    } 
    return self::clean($string, $allowed, 'a-zA-Z0-9 '); 
    } 

} 

Ejemplos:

Strip toda puntuacion:

NombredeClase :: alpaNum ($ cadena);

de Gaza, pero todo puntuacion convertir caracteres especiales:

NombredeClase :: ALPHANUM ($ cadena, null, true);

Alfa Num + puntuacion adicional:

NombredeClase :: ALPHANUM (- ' '$ string, array ('_', '','',));

Alfa Num + puntuacion adicional y convertir:

NombredeClase :: ALPHANUM (- ' '$ string, array ('_', '','',), true);

Conclusión: Si está esperando caracteres especiales y no desea desecharlos por completo, puede convertirlos antes de comprobar alphaNum. (por ej., Para desinfectar nombres de archivos, etc.)

Si descartar los caracteres especiales no tiene ningún impacto real y no se espera realmente en el sistema, puede llamarlo sin conversión de puntuación para ahorrar energía de procesamiento. (. Por ejemplo sobre la configuración de teclas para grandes conjuntos de cuerdas)

me dieron el cleanChars var desde aquí: (I levemente modificada que) https://github.com/vanillaforums/Garden/blob/master/library/core/class.format.php

21

Aquí hay una clara forma de hacerlo:

preg_replace("#[[:punct:]]#", "", $target); 
+3

Esta es la respuesta correcta –

+0

Me alegro de que ayude –

+0

Me gusta bastante. –

Cuestiones relacionadas