【问题标题】:Freemarker regexFreemarker 正则表达式
【发布时间】:2014-03-26 15:35:54
【问题描述】:

我正在尝试检查输入是否为数字。这是代码

<#if (link_data.canonical)!?matches(".*/sites/.*") && (pageData.ar.gP)?has_content >
<#if (pageData.ar.gP)?is_number >
    <link rel="author" href="https://plus.google.com/${(pageData.ar.gP)!}" />
<#else>
    <link rel="ar" href="https://plus.google.com/+${(pageData.ar.gP)!}" />
</#if>
</#if>

但是,以上内容对我来说效果不佳。所以我正在尝试编写一个正则表达式来检查 pageData.ar.gP 的值是否匹配([A-Za-z])。下面是代码

<#if (link_data.canonical)!?matches(".*/sites/.*") && (pageData.ar.gP)?has_content && (pageData.ar.gP)?matches("A-za-z")>
   <link rel="ar" href="https://plus.google.com/+${(pageData.ar.gP)!}" />
<#else>   
    <link rel="ar" href="https://plus.google.com/${(pageData.ar.gP)!}" />
</#if>

上面的代码似乎也不起作用。有什么问题?

【问题讨论】:

  • 在什么情况下不起作用?
  • 它没有检测到数字。即使我做 ?is_number 也没有检测到正则表达式 ?matches("A-za-z")。如果 pageData.ar.gP 是一个数字,我不想在 url 中附加 + 。如果 pageData.ar.gP 不是数字,我想在 url 中附加 +。
  • ?is_number 检查其左侧操作数是否具有数字类型,而不是可以解释为数字的字符串。所以你也必须在那里使用正则表达式。

标签: java regex freemarker


【解决方案1】:

我对您的freemarker 没有太多经验。所以我这里只说你的regex

您的正则表达式有几个错误。

  • 你没有把它们放在字符类[]

  • 内部字符类A-z 表示从大写A 到小写z 的所有字符。所以应该是A-Za-z

  • 您需要放置 + 以重复匹配 1 个或多个字符,例如 []+

所以最后会是:

(pageData.ar.gP)?matches("[A-Za-z]+")

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-12-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-03-21
    相关资源
    最近更新 更多