我只是在编写一些分析用户名的代码。到目前为止,我已经编写了代码来检测用户名是否包含任何不好的单词、标点符号、符号、数字或重复字符,但设法让自己在检测异常大写时陷入困境。
到目前为止,我已经采用了一种非常简单的方法或以以下形式执行此操作;如果名称有两个以上的大写字母,我们将拒绝该名称。(我使用了两个,因为有些人的名字是双管的,例如 Anne-marie)。
$capitals = strlen($name) - strlen(preg_replace('/[A-Z]/', '', $name));
if ($capitals > 2) {
$hasError = true;
}
尽管它为我们提供了一个不寻常的大写问题的半生不熟的解决方案。问题是,半生不熟!它仍然允许名称中有许多可能的大写和小写字母模式,但如果它们超过两个字符则不允许。
所以,我在 if 语句中添加了一段额外的代码来检查重复的大写字符,从而使上面的代码现在变成这样:
$capitals = strlen($name) - strlen(preg_replace('/[A-Z]/', '', $name));
if (preg_match('/[A-Z]{2,}/', $name) || $capitals > 2) {
$hasError = true;
}
现在这似乎已经解决了这个问题的 70%。用户现在不能再使用这样的模式。XXxxx, XxXxX, xxxXX, xxx-Xxxx。但是我仍然需要解决一些问题,只要他们使用少于两个字符,并且不将大写字母分组,他们仍然可以创建他们“酷”的名字。因此,如果用户要输入类似 JeSse 样式的名称,它将被接受。
所以我的问题是我将如何处理这个问题的最后一步?我只需要允许用户使用 Jesse、Jesse-James、Jesse James 格式的名字。我如何确保只有他们名字的第一个字母大写,即使他们的名字是双筒的?
你在 python 中看到我会使用 .find() 并且只检测第一个单词的第一个字母并确保它是大写的,直到我们遇到空格或连字符,然后确保空格或连字符后面的下一个字母也是大写吗?但我不知道如何在 PHP 中使用正则表达式来做到这一点。
这是使用正则表达式的正确方法吗?如果是,我将如何处理?还是 PHP 有一个秘密的 .find() 函数,我可以以与 python 类似的方式使用?如果是这样,沿着这条路线走会更合适吗?
抱歉,我讲了这么多细节,似乎很多 numtys 提出了诸如“我有一个正则表达式问题,我需要检测模式”之类的问题,然后期望得到一个对他们有用的答案”。我想提供足够的信息以便将来登陆此页面的人们有用。
非常感谢所有未来的答复。
杰米
PS只是出于兴趣,是否有人也知道如何在PHP中使用非英文字符。我是否需要创建一个我希望检测的字符字符串,或者 php 是否为每个字符(如 html 实体)提供了一个“代码”?