你好,我有一个Silex路由中的变量,我们只允许使用字母和数字
->assert('hash','\w+')
我希望变量中也能包含一个点,但我试图编辑这个正则表达式却失败了。非常感谢您的帮助,谢谢!
尝试
->assert('hash', '[a-zA-Z0-9.]+')
为什么不使用[\w.]
?
你把问题标记为PHP,所以我假设这篇手册适用。在那里,它写道:
\w any "word" character
并且
"单词"字符是指任何字母、数字或下划线字符,即任何可以成为Perl "单词"的字符。字母和数字的定义由PCRE的字符表控制,如果正在进行特定于区域设置的匹配,则可能会有所不同。例如,在“fr”(法语)区域设置中,一些大于128的字符代码用于重音字母,并且这些字符可以通过\w进行匹配。
因此,当使用\w
时,它可能匹配äöüß...,你不知道。
由于它读取哈希值,您可能还想尝试
->assert('hash', '[a-fA-F0-9.]+')
该程序只接受十六进制数字和.
,不接受 G 或 Z 等其他字符。
utf8
"编译指示,标识符可以包含任何匹配\w的字符,即使它在>127范围内。 - DavidO\w
随语言环境而变化,匹配的字符比[a-zA-Z]
多,比[^ ]
少就可以了;-) - TheConstructor我不知道 assert()
的内部细节,但可以使用 char 类:
->assert('hash','[\w.]+')
\w
包括下划线。而且,如果您的正则表达式引擎设置为 Unicode 语义,它的含义会发生变化。 - DavidO