-1

ユーザーがプロフィール内で送信するバイオ情報をトリミングするのに助けが必要です。場合によっては、校正の問題があります: 「これは OF マイクの略歴です。OF は理由もなく大文字です!クエスチョン マークと単語の間にスペースはありませんか?また、クエスチョン マークにはスペースが必要です。一時停止標識の後には、大文字、このコンマの間のスペース、and,this,one"

これが私が考えていることです:

最初に $bio 変数をトリムします

$bio = trim($bio); 

次に、句読点の後にスペースを追加します。すべての句読点タイプをコンマに置き換えるため、これは正しくありません。

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

次に、すべての文字を小文字にします。$bio 変数内の文の最初の単語の最初の文字を大文字にしておく必要があるため、これは機能しません。

$bio = strtolower($bio); 

最後に、最初のものを大文字にします。しかし、! で区切られたすべての単語の最初の文字を大文字にする方法が必要です。? - または一時停止の標識、ご存知のように... コンマを除いて。

$bio = strtoupper($bio); 

あなたが助けてくれることを願っています

4

1 に答える 1

1

絶望的に見えることを警告しなければなりません。

とにかく、一連の正規表現で何かできるかもしれません:

 // This replaces , . ! ? (if NOT followed by a space) with the same (\1),
 // followed by a space, followed by whatever followed it before (\2).
 // Note that . and ? are special characters for regexes, so we have to
 // escape them with a "\".
 $bio = preg_replace('#([,\.!\?])(\S)#ms', '\1 \2', $bio);

 // Then replace all extra spaces: any sequence of 2 or more spaces is
 // replaced by one space.
 $bio = preg_replace('# {2,}#ms', ' ', $bio);

 // Then ., !, and ? followed by lowercase should uppercase it
 // We take the full monty, ". m" and uppercase it all. Since the uppercase
 // of ". " remains ". ", we keep things simpler.
 $bio = preg_replace('#[\.!\?] [a-z])#ms', 'strtoupper("\1")', $bio);

 // Then replace ALL CAPS words with lowerspace equivalent.
 // Doesn't seem a really good idea though: "I am Mike, I worked with NASA"
 // and NASA becomes nasa?
 $bio = preg_replace('# ([A-Z][A-Z]+)#mse', 'strtolower(" \1")', $bio);

このように、あなたの文は次のようになります。

これは、理由もなく大文字であることのマイクの略歴です! 疑問符と単語の間にスペースはありませんか? また、疑問符にはスペースが必要です。また、一時停止標識の後には、大文字と、このコンマの間にスペースが必要です。

于 2012-07-02T23:46:45.717 に答える