【问题标题】:Regex: all ASCII characters but a certain character (PHP, FILTER_VALIDATE_REGEXP)正则表达式:除某个字符外的所有 ASCII 字符(PHP,FILTER_VALIDATE_REGEXP)
【发布时间】:2016-03-28 23:12:50
【问题描述】:

找到以下很好的正则表达式来匹配所有可打印的 ASCII 字符:

[ -~]

我的代码如下所示:

    $string = "My ASCII string is (not) very funny.";

    filter_var($string, FILTER_VALIDATE_REGEXP,
    array("options"=>array("regexp"=>"/^[ -~]*$/")));

这几乎是我需要的,但我想排除冒号。我试过[ -~\:][ -~^:] 都不起作用。什么是正确的正则表达式以及如何正确排除单个字符?

【问题讨论】:

  • 您的字符串中没有;:: 是冒号,; 是分号。您要允许哪个? [[:ascii:]] 呢? (我之前也没有使用带有filter_var 的正则表达式,我通常坚持使用preg_ 函数。)
  • @chris:是的,我的意思是冒号对不起。
  • 让我确定我明白你想要什么。如果您有任何冒号 (:) 或任何非 ascii 字符,您希望验证为 false,不是吗?
  • 如果我有任何冒号或任何不可打印的 ASCII 字符或任何其他字符,想要验证为 false。 Nicael 已经答对了。

标签: php regex filter


【解决方案1】:

看起来您正在寻找这样的正则表达式:

(?=[ -~])[^:]

您也可以通过将分号添加到“排除列表”来排除它:

(?=[ -~])[^:;]

【讨论】:

  • 好的,正确。我在谷歌上检查了一些解决方案,但这似乎是正确的排除方法。我最终是这样的:^((?=[ -~])[^:])*$
  • 虽然效率不高。您可以只指定 2 个范围:^[ -9;-~]*$(请参阅 ASCII table)。
  • @stribizhev:在我的情况下效率并不重要,但是谢谢指出
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-12-01
  • 2021-09-07
  • 1970-01-01
  • 1970-01-01
  • 2013-05-01
  • 2013-02-19
相关资源
最近更新 更多