【问题标题】:php regex: modify to only allow one wordphp regex:修改为只允许一个单词
【发布时间】:2014-01-09 03:54:46
【问题描述】:

我将 wordpress 的联系表单 7 插件与联系表单 db 结合使用,以在前端显示字段结果。我正在尝试过滤掉短代码中的结果,例如

<?php echo do_shortcode('[cfdb-value form="Testing" filter="FirstField~~/^s/"]'); ?>

此过滤器将仅显示以字母 s 开头的 FirstField 的值,是否可以调整此代码以仅显示一个单词值(即没有空格的单词)。如果这完全有可能?任何建议将不胜感激!

【问题讨论】:

  • 尝试^\w+ 而不是^\s。 \w 表示“没有空格的单词字符”,“+”表示“一个或多个”。我不确定您是否还必须转义反斜杠 (\\ instead of \ ),因为我不知道该函数如何处理它。
  • @MichaelHelwig 这仅显示以w 开头的结果。我只想显示包含 1 个单词的结果(即没有空格)
  • 那么该函数似乎无法正确解释正则表达式。您是否尝试过转义(两个反斜杠而不是一个)?
  • @MichaelHelwig 是的,仍然无法工作:(这就是我遇到的问题。我正在使用此处记录的过滤技术:cfdbplugin.com/?page_id=89#filter,因为我正在尝试过滤掉结果在前端,但它似乎没有正确解释它们,我不知道该怎么做:(

标签: php html regex wordpress


【解决方案1】:

尝试^s[a-zA-Z0-9]\*$ 以 s 开头,后跟括号内的任意数量的字符 []。其他方式是^s[a-zA-Z0-9]\*\S$,它坚持空格在单词的末尾!我没有测试这段代码,但想法应该在那里。

【讨论】:

  • 我只是想用空格过滤掉结果,不再需要start with s 验证。不过,我之前使用过此代码,因为在短代码中放置括号会破坏短代码:(
  • 堆栈溢出已从我的第一个答案中删除*...它必须在那里!
  • 您的第一个答案是什么? Stack Overflow 在有原因之前不会删除您的答案
  • 如果您需要任何单词,只需删除 s 试试 ^[a-zA-Z0-9]*$
  • @Low 你的意思是+,而不是*。你不会允许一个空字符串。
【解决方案2】:

这个怎么样:

/^(\S+)/

这会捕获字符串开头的所有非空格字符。

【讨论】:

  • 仍然没有运气:(通常这个正则表达式会起作用,但由于正则表达式在短代码中,一些和阅读应该是它们应该的。单词开头的's'一个工作正常,因此我以它为例,但试图只显示 1 个单词(没有空格)被证明是棘手的
  • @user1374796:您是否多次尝试逃跑,即。 \\\S
  • 我有一个小突破,您可能可以帮助我,我现在发现/\\\s/ 只显示带有空格的结果。那么我现在如何反转这个调用?
  • @user1374796:\s 的反面是\S[^\s]。尝试两者并根据需要添加转义,可能是三个或更多。
  • 这个/^(\\\S)*$/ 最终完美运行。尽管连字符似乎也可能给我带来一些问题,但无论如何也要将它们过滤掉?
【解决方案3】:

这是一个非单词(包括标点符号)的正则表达式。但它允许 unicode:

/^\w+$/u

DEMO

通过

  • correct
  • foobar
  • definitelynot
  • unicodeæøå

没有通过

  • foo bar
  • bar-foo
  • foo.bar
  • noway, sir

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-01-20
    • 2011-10-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多