Ayuda con una cadena delimitada

Tengo varias cadenas que necesito analizar. Se supone que la cadena está delimitada con un carácter de zanahoria; sin embargo, si se alcanza el número máximo de caracteres permitidos en la cadena, se omite el carácter de la zanahoria. Necesito encontrar una manera de lidiar con esto.

Aquí hay un ejemplo.

La regla es que no puede haber más de un máximo de 13 caracteres en ella. En la siguiente cadena, hay una “S” donde debería haber un carácter de zanahoria.

MASSYBU HILLSMARY 

Este es un ejemplo de una cadena que no ha alcanzado el límite de 13 caracteres

 CYPRUS^TOM 

¿Cómo puedo manejar cadenas que hayan alcanzado el límite de 13 caracteres donde no hay delimitador como en el primer ejemplo?

Primero limite la cadena a 13 caracteres (usando substr, por ejemplo), luego busque el terminador. ¿Es eso lo que estás buscando?

O bien, si está buscando el personaje que utiliza indexOf, limite el resultado a 13. Realmente depende de cómo se vea su código.

EDITAR: Déjame deletrearlo.

 $Length = Min(strlen($String), 13); if (($TerminatorIndex = strpos($String, "^")) !== FALSE) { $Length = Min($Length, $TerminatorIndex); } return substr($String, 0, $Length); 

parece un trabajo para expresiones regulares

 $str = "whatever^abcabcabcabcxABCABCABCABCXDEF^"; preg_match_all('~[^^]{1,13}~', $str, $m); var_dump($m[0]); 

salidas

  [0]=> string(8) "whatever" [1]=> string(13) "abcabcabcabcx" [2]=> string(13) "ABCABCABCABCX" [3]=> string(3) "DEF" 

Si necesita cortar caracteres adicionales, puede hacerlo así:

 $n = 13; if(strlen($str) > $n) { //do some alteration example $str = substr($str, 0, $n); }