【发布时间】:2015-10-22 15:02:21
【问题描述】:
因此,对于我的班级,我们正在模拟某人将名字、中间名和姓氏输入到表单中。我有一个变量$fullname 将它们连接起来并拉出中间的首字母以及strtolower 和ucfirst...
所以rObERT jAmES smITH 然后被解析为Robert J Smith。
现在如果有人输入R!bert J Smith(注意特殊字符“!”),它会被接受。为了解决这个问题,我用pregmatch 做了一个If/else 声明。
if (preg_match("/[^a-z\s]/i",$fullname)) {
echo ("<span class = 'warning'>Invalid User Name!</span>"."<br>"
."Please use only characters A-Z for your name."."<br>");
exit;
}
else {
echo ("User Name: ".$fullname."<br>");
}
这基本上是说如果除了字母和空格之外还有其他内容,请抛出我的回显消息。
如果有人要输入R obert J Smith,现在我遇到了问题。 (注意R 和o 之间的空格字符)。因为我允许空格,所以它说没关系。这会在以后弄乱我所有的“create username and password”功能。
TLDR:我要问的是什么将允许预匹配仅匹配或不匹配 2 个不连续的空格和字符 A-Z/i
注意:我尝试了各种版本的\s {2},但这是针对连续空格,而不是非连续空格。
PS:永远只有 2 个空格。我在将输入解析为 $fullname 之前对其进行修剪。
我已经尝试了 3 个小时,但挫败感阻碍了我在不同方向上解决这个问题的能力。
谢谢你, 爱笑的人
【问题讨论】:
-
计算空格字符的个数。检查非字母数字字符(如
!,但可能允许'和`?)。还有像 Armin van Buuren 或 Robert McPhearson 这样的名字呢? -
要匹配 2 个不连续的空格,您可以使用
'/\s\S+\s/'regex。 -
比这更复杂。如果名称是
Robert James Van Winkle III怎么办?Dr. Robert Van Winkle James, Jr.呢?您得到的答案会对您有所帮助,但您需要考虑边缘情况。 (注意:我知道您的作业可能仅限于简单的案例,因此请考虑针对实际案例的建议,而不一定针对您的班级。) -
谢谢 Ed,我确实考虑过这一点,但作业的要求只需要一个标准的 FN 中间首字母 LN。