所有大写的文字。有没有办法正确修复CAPITALIZED用户输入?

时间:2013-12-16 07:25:31

标签: javascript php jquery

当用户提交表单时,假设一个文本区域,大写锁定,我知道我们可以做几个选项来“修复”案例,其中一些是:

 - PHP - ucfirst(mb_strtolower($str));
 - CSS - text-transform: lowercase;

还有一些变化,将上述方法与其他方法相结合。这很好,但在大多数情况下,这不能正确地确定大小写。

目标不是“所有大写文本”,也不是“这是一个文本”,甚至是“全部小写。甚至段落”等等“。

假设我有这样的文字:

你好,我的名字是JHON。我是一名程序员。我在英国BBC工作

可能无法正确转换此字符串(如果我错了,请告诉我):

您好,我的名字是Jhon。我是程序员。我在英国BBC工作

如果这是不可能的,我很好。但是有一种方法可以有一些逻辑,尽管全部是小写,或者是驼峰等等?

类似的东西:

您好,我的名字是jhon。我是程序员。我在英国工作

对于所有小写字母,但 段落的第一个字母,以及点后的第一个字母 ,都可以。

是否有一些jquery插件,一些php类,无论如何,我都不知道,可以做到这一点吗?

我很抱歉,如果这个问题在某种程度上与其他一千个相关的问题重复,但我能找到的只是代码不能正确格式化案例和许多不适合所有案例的解决方案,例如:PHP remove all caps

<?php
function ucwordsreplace($matches) {
    return ucwords(strtolower($matches[0]));
}

$original = "some UPPERCASE words GO HERE";
$fixed = preg_replace_callback('/\b[A-Z]+\b/', "ucwordsreplace", $original);

echo $fixed; // some Uppercase words Go Here

3 个答案:

答案 0 :(得分:2)

俗话说,你不能用猪耳朵做一个丝绸钱包。

任何执行此操作的脚本都必须了解句子边界,人称代词,专有名称,地名和各种其他内容。即使你确实让首字母缩略词的正确大写滑动,这也是必须涵盖的大量可能性。对于所有意图和目的而言,基本上不可能这样做是不切实际的。

例如,如果您遇到单词SMITH,您是否将其作为名称中的Smith呈现,或者像作业中那样呈现?或者甚至SMITH,如果碰巧是某事的首字母缩略词?

答案 1 :(得分:2)

多年来,我学习了语言和编码,但我可以肯定地告诉你,这是不可能准确猜测的。考虑专有名词,例如人或餐馆的名称。当用户在RED BRICK OVEN RESTAURANT上写下他们的真实访问时,你将如何判断RED这个词是描述建筑物的颜色还是实际名称的一部分?

你足够接近的解决方案与你已经找到的解决方案相似,但是只要确保检查上限的帖子内容,如果要检测所有的帽子SEEM,那么运行你的重新套管溶液

这是一个solution,它描述了检测所有上限。

答案 2 :(得分:1)

我会strtolower字符串,然后在句点上分割(explode)然后trim每句话ucfirst和最后加入(implode)有空格。