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

时间:2014-05-22 13:33:35

标签: regex coldfusion railo cfml

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

  

Lorem ipsum dolor坐下来,精神上的精神。 Donec tempor pulvinar enim! Nec aliquam massa faucibus sed ?? Praesent nec consectetur sapien ... Nulla dapibus rut​​rum turpis,ac porta erat posuere vel。

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

  

LOREM IPSUM DOLOR SIT AMET,CONSECTETUR ADIPISCING ELIT。 DONEC TEMPOR PULVINAR ENIM! NEC ALIQUAM MASSA FAUCIBUS SED ??令人印象深刻的NEC CONSECTETUR SAPIEN ... NULLA DAPIBUS RUTRUM TURPIS,AC PORTA ERAT POSUERE VEL。

我该怎么办? 谢谢!

5 个答案:

答案 0 :(得分:5)

我会使用CSS而不是ColdFusion来执行此操作

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

答案 1 :(得分:5)

获取文字并将其设置为如下变量:

<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)>

reMatch()会将你的字符串拆分成较小的离散句子字符串...然后你可以用replaceNoCase()左边搜索第一个字符,然后用你的替换字符串做同样的字符串同样但我们会在第一个字符上抛出一个uCase()来大写它。

<cfloop array="#stringFixerBreaker#" index="i">
<cfoutput>#replaceNoCase(i,left(i, 1 ),uCase(left(i, 1 )))# </cfoutput>
</cfloop>  

您的输出将如下所示:

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#">

答案 2 :(得分:2)

虽然我个人喜欢@James A Mohler解决方案,但您也可以使用简单的正则表达式在CF中执行此操作。

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

答案 3 :(得分:1)

最好的方法是使用正则表达式和ReReplaceReReplaceNoCase

<cfset mystring = "lorem ipsum"/>

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

答案 4 :(得分:0)

这是我的方法,除了在诸如麦当劳之类的情况下,它适用于所有情况。我可以把它用来大写“d”,但是“s”也可以大写。 Mc'Donald'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>

这是一个工作表单,因此您可以粘贴到.cfm页面,它将起作用。

第二个cfif声明:

  <cfif Len(dogz) is 1 >

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

相关问题