允许空格、unicode 字母、数字、下划线、破折号和逗号吗?
Allow whitespace, unicode letters, digits, underscore, dash AND comma?
我对这个主题很陌生 preg
,我正在使用这个 preg_match
条件来检查用户是否输入了空格、unicode 字母、数字、下划线或破折号:
if(preg_match("/[^0\pL\pN_-]/u", $term)) {
但现在我想允许一个逗号。所以我尝试了这个:
if(preg_match("/[^0\pL\pN,_-]/u", $term)) {
它确实有效,我只是想知道为什么。我只是想更好地理解它。为什么必须是 ,_-
而不是 -_,
才能允许逗号?
如果有人能逐步向我解释这一点,我将不胜感激。
这是因为 -
用于方括号中的范围([]
-> 字符 类)。从 manual 开始:indicates character range
,例如:0-9
或 a-z
.
所以只要你把它放在最后就可以了,不必转义它。在所有其他情况下,您必须使用反斜杠将其转义,例如\-
.
表示:
,_- //At the end
_,- //At the end
\-,_ //Escape it
\-_, //Escape it
,\-_ //Escape it
_\-- //Escape it
当我们在括号内或使用字符 class 时,-
表示字符范围,如 [a-z]
。因此,如果您在字符 class 末尾以外的任何地方放置破折号,它不会被解释为文字破折号,而是作为字符范围指示符。
我对这个主题很陌生 preg
,我正在使用这个 preg_match
条件来检查用户是否输入了空格、unicode 字母、数字、下划线或破折号:
if(preg_match("/[^0\pL\pN_-]/u", $term)) {
但现在我想允许一个逗号。所以我尝试了这个:
if(preg_match("/[^0\pL\pN,_-]/u", $term)) {
它确实有效,我只是想知道为什么。我只是想更好地理解它。为什么必须是 ,_-
而不是 -_,
才能允许逗号?
如果有人能逐步向我解释这一点,我将不胜感激。
这是因为 -
用于方括号中的范围([]
-> 字符 类)。从 manual 开始:indicates character range
,例如:0-9
或 a-z
.
所以只要你把它放在最后就可以了,不必转义它。在所有其他情况下,您必须使用反斜杠将其转义,例如\-
.
表示:
,_- //At the end _,- //At the end \-,_ //Escape it \-_, //Escape it ,\-_ //Escape it _\-- //Escape it
当我们在括号内或使用字符 class 时,-
表示字符范围,如 [a-z]
。因此,如果您在字符 class 末尾以外的任何地方放置破折号,它不会被解释为文字破折号,而是作为字符范围指示符。