因此,对于我的班级,我们正在模拟某人将第一,中间和姓氏放入表格中。我有一个变量$fullname
,它会连接它们并拉出一个中间的首字母以及strtolower
和ucfirst
......
因此rObERT jAmES smITH
被解析为Robert J Smith
。
现在,如果有人要放R!bert J Smith
(注意特殊字符" !
")它会被接受。为了解决这个问题,我使用If
进行了else
/ pregmatch
声明。
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
之间的空格字符。因为我允许空格,所以它说没关系。这继续搞乱我所有的&#34; create username and password
&#34;以后的功能。
TLDR:我要问的是什么才能使pregmatch匹配或不匹配2个非连续的空格,只有A-Z/i
注意:我尝试了\s {2}
的各种版本,但这是连续的空格,而不是非连续的空格。
PS:只有2个空格。我在将输入解析为$fullname
之前修剪输入。
我现在已经尝试了3个小时,但是挫败感阻碍了我在不同方向上接近这个问题的能力。
谢谢你, thelaughingman
答案 0 :(得分:0)
您可以使用此正则表达式匹配仅允许1或2个空格的全名:
private void setClientAdditionalInfo(Map map, Client client, User user) {
Map additionalInfo = (Map) map.get("additionalInfo");
if (checkMapProperty(additionalInfo, "gender")) {
client.setGender(additionalInfo.get("gender").toString());
}
if (checkMapProperty(additionalInfo, "race")) {
client.setRace(additionalInfo.get("race").toString());
}
if (checkMapProperty(additionalInfo, "ethnicity")) {
client.setEthnicity(additionalInfo.get("ethnicity").toString());
}
.....
String
匹配任何unicode字母,而'/^\p{L}+(?:\h\p{L}+){1,2}$/u'
则支持正则表达式中的unicode。
答案 1 :(得分:0)
可以使用正则表达式:
/^\w+(\s\w+){0,2}$/
匹配1个,2个或3个以空格分隔的单词,或者使用它来始终匹配3:
/^\w+\s\w+\s\w+$/
但您也可以将检查无效字符(/[^\w]/
)与检查输入的字数分开:
if ( count( explode(' ', $fullname) ) != 3 )