Regex 在ColdFusion中,将每个句子中第一个单词的第一个字母大写

Regex 在ColdFusion中,将每个句子中第一个单词的第一个字母大写,regex,coldfusion,railo,cfml,Regex,Coldfusion,Railo,Cfml,我想得到这样一个字符串: Lorem ipsum dolor sit amet,是一位杰出的献身者。别再做临时的枕叶了!Nec aliquam massa faucibus sed??圣贤圣殿酒店。。。无需使用任何一种植物 从所有大写(或小写)的字符串开始。例如: LOREM IPSUM DOLOR SIT AMET,是一位杰出的献身者。别再做临时的枕叶了!NEC ALIQUAM MASSA FAUCIBUS SED??圣贤圣殿酒店。。。无需使用任何一种植物 我该怎么办? 谢谢大家! 我会使用C

我想得到这样一个字符串:

Lorem ipsum dolor sit amet,是一位杰出的献身者。别再做临时的枕叶了!Nec aliquam massa faucibus sed??圣贤圣殿酒店。。。无需使用任何一种植物

从所有大写(或小写)的字符串开始。例如:

LOREM IPSUM DOLOR SIT AMET,是一位杰出的献身者。别再做临时的枕叶了!NEC ALIQUAM MASSA FAUCIBUS SED??圣贤圣殿酒店。。。无需使用任何一种植物

我该怎么办?
谢谢大家!

我会使用CSS而不是ColdFusion来完成这项工作

<span style="text-transform : capitalize"><cfoutput>#lcase(mystring)#</cfoutput></span>
#lcase(mystring)#

将文本设置为如下变量:

<cfset stringFixer = "LOREM IPSUM DOLOR SIT AMET, CONSECTETUR ADIPISCING ELIT. DONEC TEMPOR PULVINAR ENIM! NEC ALIQUAM MASSA FAUCIBUS SED?? PRAESENT NEC CONSECTETUR SAPIEN... NULLA DAPIBUS RUTRUM TURPIS, AC PORTA ERAT POSUERE VEL.">
<cfset stringFixer = lCase(stringFixer)>
<cfset stringFixerBreaker = reMatch('\w.+?[.?]+',stringFixer)>
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Donec tempor pulvinar enim! nec aliquam massa faucibus sed?? Praesent nec consectetur sapien... Nulla dapibus rutrum turpis, ac porta erat posuere vel.
<cfset str = "">

<cfloop array="#stringFixerBreaker#" index="i">
    <cfset str = str & replaceNoCase(i,left(i, 1 ),uCase(left(i, 1 ))) & " ">
</cfloop>  
<cfdump var="#str#">
您的输出将如下所示:

<cfset stringFixer = "LOREM IPSUM DOLOR SIT AMET, CONSECTETUR ADIPISCING ELIT. DONEC TEMPOR PULVINAR ENIM! NEC ALIQUAM MASSA FAUCIBUS SED?? PRAESENT NEC CONSECTETUR SAPIEN... NULLA DAPIBUS RUTRUM TURPIS, AC PORTA ERAT POSUERE VEL.">
<cfset stringFixer = lCase(stringFixer)>
<cfset stringFixerBreaker = reMatch('\w.+?[.?]+',stringFixer)>
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Donec tempor pulvinar enim! nec aliquam massa faucibus sed?? Praesent nec consectetur sapien... Nulla dapibus rutrum turpis, ac porta erat posuere vel.
<cfset str = "">

<cfloop array="#stringFixerBreaker#" index="i">
    <cfset str = str & replaceNoCase(i,left(i, 1 ),uCase(left(i, 1 ))) & " ">
</cfloop>  
<cfdump var="#str#">
编辑:我的答案的最后一个接触点

如果需要重建字符串,请执行以下操作:

<cfset stringFixer = "LOREM IPSUM DOLOR SIT AMET, CONSECTETUR ADIPISCING ELIT. DONEC TEMPOR PULVINAR ENIM! NEC ALIQUAM MASSA FAUCIBUS SED?? PRAESENT NEC CONSECTETUR SAPIEN... NULLA DAPIBUS RUTRUM TURPIS, AC PORTA ERAT POSUERE VEL.">
<cfset stringFixer = lCase(stringFixer)>
<cfset stringFixerBreaker = reMatch('\w.+?[.?]+',stringFixer)>
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Donec tempor pulvinar enim! nec aliquam massa faucibus sed?? Praesent nec consectetur sapien... Nulla dapibus rutrum turpis, ac porta erat posuere vel.
<cfset str = "">

<cfloop array="#stringFixerBreaker#" index="i">
    <cfset str = str & replaceNoCase(i,left(i, 1 ),uCase(left(i, 1 ))) & " ">
</cfloop>  
<cfdump var="#str#">

转储结果以检查是否一切正常:

<cfset stringFixer = "LOREM IPSUM DOLOR SIT AMET, CONSECTETUR ADIPISCING ELIT. DONEC TEMPOR PULVINAR ENIM! NEC ALIQUAM MASSA FAUCIBUS SED?? PRAESENT NEC CONSECTETUR SAPIEN... NULLA DAPIBUS RUTRUM TURPIS, AC PORTA ERAT POSUERE VEL.">
<cfset stringFixer = lCase(stringFixer)>
<cfset stringFixerBreaker = reMatch('\w.+?[.?]+',stringFixer)>
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Donec tempor pulvinar enim! nec aliquam massa faucibus sed?? Praesent nec consectetur sapien... Nulla dapibus rutrum turpis, ac porta erat posuere vel.
<cfset str = "">

<cfloop array="#stringFixerBreaker#" index="i">
    <cfset str = str & replaceNoCase(i,left(i, 1 ),uCase(left(i, 1 ))) & " ">
</cfloop>  
<cfdump var="#str#">

虽然我个人喜欢@James A Mohler解决方案,但您也可以使用简单的正则表达式在CF中实现这一点

function Initcap(text){
    return rereplace(lcase(arguments.text), "(\b\w)", "\u\1", "all");
}

最好的方法是使用regex和
ReReplace
ReReplaceNoCase

<cfset mystring = "lorem ipsum"/>

#ReReplace(mystring ,"\b(\w)","\u\1","ALL")#

#重新替换(mystring、“\b(\w)”、“\u\1”、“全部”)#

这是我的方法,它在所有情况下都有效,但在麦克唐纳这样的情况下除外。我可以让它大写“d”,但“s”也可以大写。麦当劳

 <cfif ISDefined('mywds')>
   <cfoutput>
      #mywds#<br>
       <cfset catz = #LCase(mywds)#>
          <cfloop index="dogz" list="#catz#" delimiters=" ">
             <cfif Len(dogz) is 1 >
                 #UCase(dogz)#
             <cfelse>
                 #Left(UCase(dogz), 1 )##Right(LCase(dogz),
                 Len(dogz) - 1 )#
             </cfif>
          </cfloop>
      </cfoutput>
  </cfif>


 <cfform action="" method="POST" target="_self">
     <input type="text" name="mywds" size="50"><br>
     <input type="submit" name="submit" value="Submit">
 </cfform>

#mywds#
#UCase(狗)# #左(UCase(dogz),1)右(LCase(dogz), Len(dogz)-1)#
这是一个工作表单,因此您可以粘贴到.cfm页面中,它将正常工作

第二份cfif声明:

  <cfif Len(dogz) is 1 >


如果有人输入“john t williams”这样的文本,代码不会在单个字符“t”上抛出错误。

您尝试了什么?向我们展示您遇到的一些代码和特定错误/问题。可能会有帮助。我有一个答案,但没有认真阅读-对不起:)你也可以使用,1 ucase和rest lcase。谢谢你,但我从没见过这样的事。我很快就想到了这一点,就像一个过程一样(我有一种过度思考问题解决方案的倾向)。我要测试一下你的表情。我确实喜欢上面答案中的CSS解决方案,但它不能完全解决OPs问题。@Frank Tudor OK。这是一个很好的答案,我用它作为函数的基础。然而,我发现了一个重要的改进。如果文本的最后一句不是以句点或问号结尾,则该条目将从数组中省略。下面的正则表达式防止了此缺陷\w.+?[.?!]+\w.+$它还添加了第三个和最后一个句子结尾标点符号,当然是感叹号。这个正则表达式将确保最后一句永远不会丢失,即使最后一句以字母数字字符结尾。不管怎样,我还是对你的答案投了赞成票!等等……缺少几个步骤,在大写第一个字母之前,您需要将文本小写,并将其字符串原封不动地包装起来(它不会将所有其他字母小写)。如果您需要强制页面中的某些数据,则标题标记也会失败。这很好(也很方便),但不能满足OPs的要求。我也做了大写的JavaScriptDOM…这里还需要一些步骤。我已作了修改,以涵盖文本是大写的这一事实。我在OPS中没有看到任何关于
标记的内容。你是对的……他没有。但是我对title标签的看法是:我们不知道OP想用这个功能和最终的固定字符串做什么。但是我第一手碰到过这个一次性的问题,所以我认为它值得注意。@valueweaver-CF函数不区分大小写,所以这就是它被否决的原因。这可能是因为上述方法实际上不起作用。另外,几个月前的做法也是如此。该线程中的示例确实有效。请注意,他们使用了
lower()
函数。@leigh我将再次运行它,看看它为什么不起作用。可以使用ReReplaceNoCase。@valueweaver-它不是函数。逻辑是有缺陷的
\u
仅将每个单词的第一个字母转换为大写。如果单词的其余部分是大写的(如OP中的)?上面的代码无法处理这个问题。有道理吗?没错。急于帮助需要帮助的人忘记了基本的逻辑测试;)嗯,我不知道这是什么急事,因为六个月前已经有人回答了;-)