3

ユーザー入力をきれいにするために使用される PHP の句読点修正関数をゆっくりと改良しています。この関数は現在、句読点の後にスペースを追加し、句読点の前にスペースを削除し、各文の最初の単語を大文字にします。同様の機能を探している人を何人か見たので、これまでに持っているものを喜んで共有します. それは私が望むところにかなり近いですが、コンマの後にスペースを追加するときは、コンマが1,000などの数字の中にあるときは避けるべきです? 多分私が持っているものを短くする方法がありますが、それでも同じ結果に達しますか? 御時間ありがとうございます...

function format_punc($string){
    $punctuation = ',.;:';
    $string = str_replace(' ?', '?', str_replace(' .', '.', str_replace(' ,', ',', preg_replace('/(['.$punctuation.'])[\s]*/', '\1 ', $string))));
    $string = trim(preg_replace('/[[:space:]]+/', ' ', preg_replace('/([\.!\?]\s+|\A)(\w)/e', '"$1" . strtoupper("$2")', $string)));
    if($string[strlen($string)-1]==','){
        $string = substr($string, 0, -1).'.';
    }
    return $string;
}
4

3 に答える 3

5

これが私の更新されたphp修正句読点関数です...現在は正しく機能しているようです。圧縮する方法はあると思いますが、文字列に対して次のようにすると機能します...

などの句読点の重複を減らします!! に !
複数のスペースを 1 つのスペースに減らす
? の前のスペースを削除します。. 、
後にスペースを追加します。:
コンマの後にスペースを追加しますが、数字の一部である場合は
追加しません ピリオドの後にスペースを追加しますが、数字または略語の一部である場合は追加しません
文字列の先頭と末尾から空白を削除します
文の最初の単語を大文字
にしますコンマです

function format_punc($string){
    $punctuation = ';:';
    $spaced_punc = array(' ?', ' .', ' ,');
    $un_spaced_punc = array('?', '.', ',');
    $string = preg_replace("/([.,!?;:])+/iS","$1",$string);
    $string = preg_replace('/[[:space:]]+/', ' ', $string);
    $string = str_replace($spaced_punc, $un_spaced_punc, $string);
    $string = preg_replace('/(['.$punctuation.'])[\s]*/', '\1 ', $string);
    $string = preg_replace('/(?<!\d),|,(?!\d{3})/', ', ', $string);
    $string = preg_replace('/(\.)([[:alpha:]]{2,})/', '$1 $2', $string);
    $string = trim($string);
    $string = preg_replace('/([\.!\?]\s+|\A)(\w)/e', '"$1" . strtoupper("$2")', $string);
    if($string[strlen($string)-1]==','){
        $string = substr($string, 0, -1).'.';
    }
    return $string;
}

時間をかけてこのコードを要約し、それでも同じ結果を返すものを作成する場合は、共有してください! ありがとう、楽しんでください!

于 2012-08-26T11:56:36.483 に答える
0

正規表現は([^0-9][.][^0-9])[\s] *

preg_replace('/([^0-9]['.$punctuation.'][^0-9])[\s]*/', '\1 ', $string)

正規表現テストへのリンク

于 2012-08-25T20:16:18.207 に答える