翻译正则表达式从JavaScript到ColdFusion

Translate regex from JavaScript to ColdFusion?

本文关键字:ColdFusion JavaScript 正则表达式 翻译      更新时间:2023-09-26

大家好,我有我在JavaScript中创建的正则表达式,现在我想在ColdFusion中拥有它们。我在ColdFusion中遇到的几个问题,第一个是空白值。如果变量为空,正则表达式输出的是false。第二个问题是将这些正则表达式组合在一行中,这将检查我的文本文件的整行。出于某种原因,我的正则表达式忽略了大写/小写。如果我只有小写,我的正则表达式输出为真,即使在这种情况下是不允许的。这是我的正则表达式:

<cfset fileRegex = "^(?i)^ *[a-z][a-z' .,-]{0,49} *'t(?i) *[a-z][a-z' .,-]{0,49} *'t *(0?[1-9]|1[0-2])'/(0?[1-9]|1'd|2'd|3[01])'/(19|20)'d{2} *'t(?i) *([M|F]) *'t(?i) *(0?[0-9]|1[0-2]|[A-Z]{1,2}) *'t *([^'t].{0,50}) *'t(?i) *([A-Z0-9 ,]{1,102})? *'t *'d{10} *('t[^'t]*){22}'t *([0-9]{1,4}) *'t([^'t]*)('t *[A-Z ',.-]{1,50} *)?$">
<cfset myData = "John   Terry   1/29/1981   M   0   London  NULL    0129198109  609 8000    1   England">
<cfif REFind(fileRegex,myData,true) GT 0>
    true<br>
<cfelse>
    false<br>
</cfif>

所以在这种情况下,我的数据集中的最后一个词是England,我的正则表达式应该只接受大写,它没有,第二个问题是,如果我离开这个字段为空,我将得到False作为回报。最后一个词也是可选的,如果我把它和标签一起擦掉,我应该得到true。如果有人能帮助解决这个问题,请告诉我。

您的regex需要22列('t[^'t]*){22}。你可以让它们是可选的(-> ('t[^'t]*){0,22}), regex将基本工作:

(?i)^ *[a-z][a-z' .,-]{0,49} *'t *[a-z][a-z' .,-]{0,49} *'t *(0?[1-9]|1[0-2])'/(0?[1-9]|1'd|2'd|3[01])'/(19|20)'d{2} *'t *([MF]) *'t *(0?[0-9]|1[0-2]|[A-Z]{1,2}) *'t *([^'t].{0,50}) *'t *([A-Z0-9 ,]{1,102})? *'t *'d{10} *('t[^'t]*){0,22}'t *([0-9]{1,4}) *'t([^'t]*)('t *[A-Z ',.-]{1,50} *)?$

查看regex演示

一些较小的增强:

  • 注意你有很多(?i)里面,这是不必要的。在模式开始时一个单独的(?i)就足够了。
  • [M|F]中的
  • |应该被删除,因为它被解析为一个文字管道符号。[M|F]匹配三个字符中的一个:M|F
  • 请检查/是否真的应该转义,我怀疑它需要转义,因为这里没有正则表达式分隔符。