preg_match 和正则表达式 - 允许或排除字符
preg_match and regex - allow or exclude characters
我在 preg_match 中允许指定字符时遇到问题。我尝试制作以下模式:/^[A-Za-z0-9 !@#$%&()-_\[\]:;\"'|,.\?\/]/
现在它允许一切,甚至不存在的 *。
我知道有一条规则,在正则表达式指定的字符之前,我必须在字符前加上 "\"
。如果我错了,请纠正我。
有人可以向我解释一下这是如何工作的吗?
我想允许这个字符:
A-Z a-z 0-9 !@#$%&()-_[]:;"'|,.?/(当然还有空格)
并排除这个:
~`^*+={}<>\
未转义的连字符需要位于字符的第一个或最后一个位置 class,否则需要对其进行转义。否则它被认为是一个范围。所以使用:
/^[A-Za-z0-9 !@#$%&()_\[\]:;\"'|,.\?\/-]/
在您的正则表达式 /^[A-Za-z0-9 !@#$%&()-_\[\]:;\"'|,.\?\/]/
中,其中 -
位于 )
(ASCII: 41) 和 _
(ASCII: 95) 的中间,因此匹配所有此范围内的字符。
您还需要使用锚点来匹配整个输入:
/^[A-Za-z0-9 !@#$%&()_\[\]:;\"'|,.\?\/-]+$/
字符class中的这部分)-_
是一个字符范围。
从 )
到 _
。
您可能应该转义破折号.. )\-_
那么它只是一个字符。
41 29 ) 73 49 I
42 2A * 74 4A J
43 2B + 75 4B K
44 2C , 76 4C L
45 2D - 77 4D M
46 2E . 78 4E N
47 2F / 79 4F O
48 30 0 80 50 P
49 31 1 81 51 Q
50 32 2 82 52 R
51 33 3 83 53 S
52 34 4 84 54 T
53 35 5 85 55 U
54 36 6 86 56 V
55 37 7 87 57 W
56 38 8 88 58 X
57 39 9 89 59 Y
58 3A : 90 5A Z
59 3B ; 91 5B [
60 3C < 92 5C \
61 3D = 93 5D ]
62 3E > 94 5E ^
63 3F ? 95 5F _
我在 preg_match 中允许指定字符时遇到问题。我尝试制作以下模式:/^[A-Za-z0-9 !@#$%&()-_\[\]:;\"'|,.\?\/]/
现在它允许一切,甚至不存在的 *。
我知道有一条规则,在正则表达式指定的字符之前,我必须在字符前加上 "\"
。如果我错了,请纠正我。
有人可以向我解释一下这是如何工作的吗?
我想允许这个字符: A-Z a-z 0-9 !@#$%&()-_[]:;"'|,.?/(当然还有空格)
并排除这个: ~`^*+={}<>\
未转义的连字符需要位于字符的第一个或最后一个位置 class,否则需要对其进行转义。否则它被认为是一个范围。所以使用:
/^[A-Za-z0-9 !@#$%&()_\[\]:;\"'|,.\?\/-]/
在您的正则表达式 /^[A-Za-z0-9 !@#$%&()-_\[\]:;\"'|,.\?\/]/
中,其中 -
位于 )
(ASCII: 41) 和 _
(ASCII: 95) 的中间,因此匹配所有此范围内的字符。
您还需要使用锚点来匹配整个输入:
/^[A-Za-z0-9 !@#$%&()_\[\]:;\"'|,.\?\/-]+$/
字符class中的这部分)-_
是一个字符范围。
从 )
到 _
。
您可能应该转义破折号.. )\-_
那么它只是一个字符。
41 29 ) 73 49 I
42 2A * 74 4A J
43 2B + 75 4B K
44 2C , 76 4C L
45 2D - 77 4D M
46 2E . 78 4E N
47 2F / 79 4F O
48 30 0 80 50 P
49 31 1 81 51 Q
50 32 2 82 52 R
51 33 3 83 53 S
52 34 4 84 54 T
53 35 5 85 55 U
54 36 6 86 56 V
55 37 7 87 57 W
56 38 8 88 58 X
57 39 9 89 59 Y
58 3A : 90 5A Z
59 3B ; 91 5B [
60 3C < 92 5C \
61 3D = 93 5D ]
62 3E > 94 5E ^
63 3F ? 95 5F _