나는이 문제를 해결하는 데 아주 가깝지만 문자열을 감싸는 공백을 제거하는 방법을 알 수는 없다. 예 : ' ! '
, '! '
및 ' !'
은 '!'
이됩니다. 그리고 이것은? 캐릭터, . 문자 및 기타 구두점 문자.문자열 문자 대체 PHP
여기 내 코드가 있습니다. 그것은 문자를 가져 와서 내가 해낸 나토 단어로 변환해야하는데, 구두점이 잘못되었습니다. 예를 들어 ' ! awesome. .! '
은 ' ! Alfa Whiskey Echo Sierra Oscar Mike Echo . . !'
으로 바뀌며 구두점 사이의 공백을 원하지 않습니다.
function to_nato($words){
$key = array("A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z");
$translationKey = array("Alfa", "Bravo", "Charlie", "Delta", "Echo", "Foxtrot", "Golf", "Hotel", "India", "Juliet", "Kilo", "Lima", "Mike", "November", "Oscar", "Papa", "Quebec", "Romeo", "Sierra", "Tango", "Uniform", "Victor", "Whiskey", "Xray", "Yankee", "Zulu");
$strToRet = "";
for($i = 0; $i < strlen($words); $i++) {
$letter = substr($words, $i, 1);
if(ctype_alpha($letter)) {
for($keySearch = 0; $keySearch < count($key); $keySearch++) {
$letterToSearch = array_search($key[$keySearch], $key);
if(strcasecmp($letter, $key[$letterToSearch]) == 0) {
$natoLetter = $translationKey[$letterToSearch];
$strToRet .= $natoLetter;
}
}
}
else {
$strToRet .= $letter;
}
}
$strToRet = preg_replace('/([a-z])([A-Z])/s','$1 $2', $strToRet);
//$strToRet = str_replace(" ! ", "!", $strToRet, $count);
return $strToRet;
}
문제와 관련하지,하지만 당신은 문자 매핑을 찾기 위해 두 배열 대신에 연관 배열을 사용해야합니다 – Barmar
나는 당신의 기능을 시험해 보았다. 나는 구두점 앞에 여분의 공백이 없다. 구두점 주위의 유일한 공백은 원래 문자열에있는 공백입니다. – Barmar
나는 Alpha Whisky Echo Sierra Oscar Mike Echo를 얻는다. " – Barmar