gpt4 book ai didi

php - 正则表达式仅允许字母数字、逗号、连字符、下划线和分号

转载 作者:IT王子 更新时间:2023-10-29 00:07:07 27 4
gpt4 key购买 nike

我已经有了一些工作代码,但我需要有人帮助解释为什么它可以工作,如果他们可以的话!

我正在使用 PHP 替换字符串中的任何内容,如果它不是 a-z、A-Z、0-9、逗号、分号、下划线或连字符(最终应该代表单个用户名或逗号/分号分隔的用户名列表)。

以下作品:

$data = preg_replace('/[^,;a-zA-Z0-9_-]/s', '', $data);

但以下不是:

$data = preg_replace('/[^a-zA-Z0-9_-,;]/s', '', $data);

为什么这只在逗号和分号位于开头时才有效?把它们放在最后似乎会破坏东西(这是我最初遇到/[^a-zA-Z0-9_-]/s 时尝试的方法。

顺便说一句,我还使用以下内容来修剪任何尾随分号(复数)或逗号(复数),有人可能会建议一种更有效和/或更优雅的方法这个?:

if(preg_match('/;$/', $data))
{
$data = rtrim($data, ';' );
}
if(preg_match('/,$/', $data))
{
$data = rtrim($data, ',' );
}

感谢您的帮助:)

最佳答案

不是逗号和分号导致您的问题;这是连字符。查看角色类的各个部分并考虑它们的含义:

0-9 # Anything from '0' to '9', meaning 0, 1, 2, ... 9
A-Z # Anything from 'A' to 'Z', meaning A, B, C, ... Z
_-, # Anything from '_' to ',', meaning...uh...hmmm.

_, 没有明确的进展,因此正则表达式引擎不确定如何理解这一点。在字符类中,如果要按字面解释连字符,则它需要位于类的开头或结尾(或用反斜杠转义)。所以这些都可以工作:

[^,;a-zA-Z0-9_-]
[^-,;a-zA-Z0-9_]
[^a-zA-Z0-9_\-,;]

至于修剪结尾,您可以在一个正则表达式替换中完成所有这些操作:

$data = preg_replace('/[^,;a-zA-Z0-9_-]|[,;]$/s', '', $data);

关于php - 正则表达式仅允许字母数字、逗号、连字符、下划线和分号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9333325/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com