正则表达式:匹配除某个字符外的所有ASCII字符(PHP,FILTER_VALIDATE_REGEXP)

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

具体内容如下:

[ -~]

我的代码长这样:

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

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

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


1
你的字符串中没有 ;: 是冒号,; 是分号。 你想允许哪个? [[:ascii:]] 呢?(我之前也没有使用过带有 filter_var 的正则表达式,通常我会使用 preg_ 函数。) - chris85
@chris:是的,我是指冒号,抱歉。 - Blackbam
让我确认一下我是否理解你的意思。你想要在有任何冒号(:)或任何非ASCII字符时将验证设置为false,是吗? - Vinícius Fagundes
如果我有任何冒号、任何不可打印的ASCII字符或任何其他字符,希望将验证设置为false。Nicael已经正确回答了。 - Blackbam
1个回答

4

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

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

您可以通过将分号添加到“排除列表”中来排除分号:
(?=[ -~])[^:;]

好的,正确。我在谷歌上检查了一些解决方案,但这似乎是排除的正确方法。最终我得到了这个:^((?=[ -~])[^:])*$ - Blackbam
虽然这样不够高效。你可以只指定2个范围:^[ -9;-~]*$(参见ASCII表)。 - Wiktor Stribiżew
@stribizhev:在我的情况下,效率并不重要,但感谢你指出来。 - Blackbam

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接