我需要一个正则表达式来检查一个字符串是否只包含字母(az),并且第一个字母是大写的,你不能在一个单词大写中有2个字母喜欢:THomas或THOMAS但Thomas Anderson(托马斯安德森)也是有效
外观:
The Magician Of The Elfs
有效,但不是ThE MaGiCiAN oF ThE ELFS
if (!preg_match("??", $name)) {
echo "Invalid name!";
}
希望你理解!
托马斯
无效:
MaGIciaN Of The ELFz
THomas anderson
有效:
Magician of the elfs
Magician Of the Elfs
Magician of The elfs
Thomas Anderson
Thomas anderson
基本上我不希望一个单词中有超过1个大写字母,而不是句子。
答案 0 :(得分:5)
'/^[A-Z][a-z]+( [A-Z][a-z]+)*$/'
但未经测试。
编辑哦,也许我误解了你的问题。以上假设最小字长为2。 “John A”或“A Horse”有效吗?在这种情况下:'/^[A-Z][a-z]*( [A-Z][a-z]*)*$/'
。
根据更新的要求:
'/^[A-Z][a-z]*( [A-Za-z][a-z]*)*$/'
验证一个大写字母,后跟任意数量的小写字母。在此之后,任意数量的序列:空格(可能是大写字母),任意数量的小写字母(每个空格至少有一个字母)。
答案 1 :(得分:3)
您还可以通过Unicode character properties:
来描述角色/^\p{Lu}\p{Ll}*(?:\s+\p{Lu}\p{Ll}*)*$/
修改由于您更改了要求,请尝试使用以下正则表达式:
/^[\p{Lu}\p{Ll}]\p{Ll}*(?:\s+[\p{Lu}\p{Ll}]\p{Ll}*)*$/
现在第一个字符或每个单词可以是大写字母或小写字母。
答案 2 :(得分:1)
$str = "ThE MaGiCiAN oF ThE ELFS";
$s = explode(" ",$str);
foreach ($s as $k){
if ( ! (preg_match("/^[A-Z][a-z]+/",$k) )){
print "$str does not match.\n";
break;
}
}
答案 3 :(得分:0)
哇。 \b
,伙计。
if matches /\B[A-Z]/ then invalid
或者,要知道Unicode,
if matches /\B\p{Lu}/ then invalid
您可能希望首先确保整个字符串与/^[\p{Lu}\p{Ll}\s]$/
匹配,以避免将The (Magic) Elf
之类的字符串保留为有效字段。
答案 4 :(得分:0)
if (preg_match("\w[A-Z]", $name)) {
echo "invalid name!";
}