【问题标题】:Regex Check Whether a string contains characters other than specified正则表达式检查字符串是否包含指定以外的字符
【发布时间】:2013-09-10 15:42:49
【问题描述】:

如何检查字符串是否包含以外的字符:

  • 字母(小写/大写)

  • 数字

  • 空格

  • 逗号(,)

  • 期间(.

  • 括号( )

  • &

  • '

  • $

  • +(加)减(-)(*)(=)算术运算符

  • /

在 ColdFusion 中使用正则表达式?

我想确保字符串不包含指定以外的单个字符。

【问题讨论】:

  • 我已经稍微编辑了我的答案以便更清楚,如果有任何问题请告诉我?

标签: regex coldfusion coldfusion-8


【解决方案1】:

你可以这样查找是否有无效字符:

<cfif refind( "[^a-zA-Z0-9 ,.&'$()\-+*=/]" , Input ) >

    <!--- invalid character found --->

</cfif>

[...] 是一个字符类(匹配内部的任何单个字符),而开头的 ^ 表示“不” - 即如果它发现任何不被接受的东西char,它返回true。

我不明白“小括号(开闭)”,但你猜你的意思是&lt;&gt; 吗?如果您想要(){},只需将它们交换即可。对于[],您需要将它们转义为\[\]


字符类转义

在一个字符类中,只有少数字符需要用反斜杠转义,它们是:

  • \ - 如果您想要文字反斜杠,请将其转义。
  • ^ - 如果插入符号是第一个字符,则必须对其进行转义,否则它会否定类。
  • - - 破折号创建一个范围。它必须被转义,除非第一个/最后一个(但建议始终如此)
  • [] - 两个括号都应该被转义。

【讨论】:

  • 谢谢彼得。这个对吗? "[^a-zA-Z0-9 ,.&'$()-+=_/]" 。我不确定我们需要转义的字符。
  • 差不多。您需要转义-,否则它会在)+ 之间创建一个范围(这意味着* 被包括在内。(即[^a-zA-Z0-9 ,.&amp;'$()\-+=_/])。我用关于五个字符的一些注释更新了答案需要在字符类中转义。
  • (实际上,刚刚看到更新后的问题说应该包含*,所以从技术上讲,你想要的会起作用,但避开破折号并明确包含星号仍然更清楚。)
【解决方案2】:

ColdFusion 使用 Java 的引擎来解析正则表达式,无论如何要确保字符串不包含您提到的字符之一然后尝试:

^(?![a-zA-Z0-9 ,.&$']*[^a-zA-Z0-9 ,.&$']).*$

上述表达式仅在您逐行解析文件时才有效。如果要将其应用于包含多行的文本,则需要使用全局修饰符和多行修饰符并将表达式更改为如下所示:

^(?![a-zA-Z0-9 ,.&$']*[^a-zA-Z0-9 ,.&$'\r\n]).*$

Regex101 Demo

【讨论】:

  • Coldfusion 可以访问 Java 的正则表达式引擎,但它的内置函数使用 Apache ORO 引擎。另外,您的表达过于复杂,与问题中当前描述的字符不匹配?
【解决方案3】:

正则表达式:

[^][a-zA-Z0-9 ,.&'$]

如果字符串包含列表中的字符以外的任何字符,则匹配。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-03-30
    • 2014-04-25
    • 2017-05-03
    相关资源
    最近更新 更多