-1

我需要帮助来修剪用户在其个人资料中提交的生物信息。有时会出现校对问题:“这是 Mike 的简历,OF 是大写的,没有理由!问号和那里的单词之间没有空格?问号也应该有空格。在停车标志之后也应该有大写,逗号之间有空格,and,this,one"

这是我的想法:

首先我会修剪 $bio var

$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 回答