【发布时间】:2017-06-09 21:00:15
【问题描述】:
我会尽量让我的问题简短而易于理解,我在 javascript 中使用了一个简单的 RegEx 来检查不是字母数字的字符(AKA 符号)。应该是 "/[$-/:-?{-~!"^_`[]]/"
在javascript中,做
if(/[$-/:-?{-~!"^_`\[\]]/.test( string ))
正常工作,如果字符串中有任何这些字符,它将给出 true,否则,它将给出 false。我尝试在PHP中做同样的事情,如下方式
if(preg_match('/[$-/:-?{-~!"^_`\[\]]/', $string ))
其他正则表达式以这种方式工作,但无论在 PHP 中运行什么,这个特定的正则表达式都会返回 false。
这有什么理由吗?难道我做错了什么? PHP 是否以不同的方式理解正则表达式?我应该改变什么才能让它工作?
感谢您的宝贵时间。
【问题讨论】:
-
/是您的分隔符,您需要在该字符类中对其进行转义。很惊讶在 JS 中没有引发问题。另外$-/不是$、-或/,它是一个范围(36 - 47、asciitable.com/index/asciifull.gif) -
@chris85 我认为这是因为 javascript 正则表达式不是字符串,因此它将
/视为开放字符类的一部分。不过我也很惊讶。 -
然而,OP,与其列出一堆你不想要的字符,不如创建一个你想要的字符模式。您提供的列表不是数千个所有符号字符的完整列表。不同的键盘布局具有您没有或看不到的字符。你最好使用像
/[^a-zA-Z0-9]/这样的否定字符类,这意味着匹配任何不是字母或数字的东西。类开头的^表示NOT 这些字符。 -
由于 php 使用 PCRE,因此使用分隔符
/会出现模式错误,如此处所示 regex101.com/r/3ILGgE/1 -
问题已更正,谢谢大家。我会记住否定方法。
标签: javascript php regex