Php 如何检查字符串在4个连续字符后是否没有元音
我想检查用户是否输入了接近有效名称的内容。因此,如果输入了类似于Php 如何检查字符串在4个连续字符后是否没有元音,php,regex,char,preg-replace,preg-match,Php,Regex,Char,Preg Replace,Preg Match,我想检查用户是否输入了接近有效名称的内容。因此,如果输入了类似于gbcvcvrt的内容,我希望验证它并将其标记为非真实姓名。类似于的G+元音应该被验证为正确的名称 在任何长度的字符串上,代码都应该检测四个连续的非元音字母。 顺便说一下,我不希望任何人的名字是节奏 考虑 $String = 'therhythm'; 我们不能检查前四个字符,我们必须检查整个字符串并检查任意四个连续的非元音字母,无论它们位于字符串的什么位置。这样我们就可以验证$String是否无效,即使在检查前四个字母时,前五个字
gbcvcvrt
的内容,我希望验证它并将其标记为非真实姓名。类似于的G+元音
应该被验证为正确的名称
在任何长度的字符串上,代码都应该检测四个连续的非元音字母。
顺便说一下,我不希望任何人的名字是节奏
考虑
$String = 'therhythm';
我们不能检查前四个字符,我们必须检查整个字符串并检查任意四个连续的非元音字母,无论它们位于字符串的什么位置。这样我们就可以验证$String是否无效,即使在检查前四个字母时,前五个字符会验证它
- 也不应包含3个连续元音
- 不应包含数字
- 非字母字符
<?php
$string = "gkwohtfeiak3d";
function checkstring($input){
if(preg_match("/[0-9]+/", $input, $match) || preg_match("/[AEIOU]{3,}/i", $input, $match)){
if(preg_match("/[0-9]+/", $input, $match)){
echo "Your string has numbers.<br/>";
}
if(preg_match("/[AEIOU]{3,}/i", $input, $match)){
echo "Your string has three or more consecutive vowels";
}
}else{
$checkthis = substr($input, 4);
if(preg_match("/[AEIOU]+/i", $checkthis, $match2)){
echo "$input has vowels after the fourth character";
}else{
echo "$input has no vowels after the fourth character";
}
}
}
checkstring($string);
?>
对于测试字符串
asdfasdf
使用以下正则表达式:
([bcdfghjklmnpqrstvwxyz]{3}+)/ig
它将捕捉3个或更多重复的辅音,你可以用受人尊敬的逻辑来测试它
使用PHP,您可以尝试以下方法:
function testString($data) {
if (!preg_match('/([bcdfghjklmnpqrstvwxyz]{3}+)/', $data)) {
return 'Valid';
} else {
return 'Invalid';
}
}
echo testString('asasacdDdfasdf');
echo '<br>';
echo testString('Ilia');
函数测试字符串($data){
如果(!preg_match('/([bcdfghjklmnpnpqrstvwxyz]{3}+/',$data)){
返回“有效”;
}否则{
返回“无效”;
}
}
echo testString('asasasacdddfasdf');
回声“
”;
echo测试字符串('Ilia');
根据您最近的编辑:您可以为此使用以下正则表达式:
^(?!.*?[^aeiou]{5})(?!.*?[aeiou]{3})[a-z]*$
在线演示:
细分:
=>匹配除元音以外的任何内容[^aeiou]
=>负向前看以确保不存在5个连续辅音的情况(?!*?[^aeiou]{5})
=>以确保没有3个连续元音的大小写(?!.[aeiou]{3})
=>以确保输入中只有字母[a-z]*
<?php
$values = array(
"test",
"al",
"beautiful",
"eautiful",
"mohsen",
"ehsasssss",
"a test",
"yeeeeee",
"test",
"mohammad",
"ali",
"mohsen",
"mohsenmlpl",
"allllll",
"allilllllo",
"thisisatest",
"zagros",
"4o54o45646o",
"therhythm",
"theg+vowel",
"gbcvcvrt",
"user3109875",
);
foreach ($values as $key => $value)
{
echo "$value => ", preg_match("/^(?![aeiou]{3,})(?:\D(?![^aeiou]{4,}[aeiou]*)(?![aeiou]{4,})){3,}$/", $value)? "TRUE" : "FALSE", "\n";
}
那么
gbcvacvrt
是否有效?元音如何验证名称?很难区分什么是“有效的”什么是“无效的”,除非你使用某种字典,因为我很高兴我典型的asdfasdf passesMerckx和Schnell是真正的姓氏。鲍尔和Aoe同上。这只是我的头顶;实际的研究应该会带来更多的反例。这个问题似乎离题了,因为试图以任何方式验证人名听起来都是一个可怕的想法。@deceze+1;看看这是什么?返回“$input没有元音”@voodoo417它在我的服务器上正确显示。这将匹配:$)+abc
@M42是它应该匹配的。OP也需要非字母数字字符。如果有一些解释会更好。当然,我会给我的问题添加一些解释。它会将testteee
与超过3个连续的e
匹配,如果是连续的辅音,则将testttttt
匹配。现在检查更新的。
<?php
$values = array(
"test",
"al",
"beautiful",
"eautiful",
"mohsen",
"ehsasssss",
"a test",
"yeeeeee",
"test",
"mohammad",
"ali",
"mohsen",
"mohsenmlpl",
"allllll",
"allilllllo",
"thisisatest",
"zagros",
"4o54o45646o",
"therhythm",
"theg+vowel",
"gbcvcvrt",
"user3109875",
);
foreach ($values as $key => $value)
{
echo "$value => ", preg_match("/^(?![aeiou]{3,})(?:\D(?![^aeiou]{4,}[aeiou]*)(?![aeiou]{4,})){3,}$/", $value)? "TRUE" : "FALSE", "\n";
}
test => TRUE
al => FALSE
beautiful => TRUE
eautiful => FALSE
mohsen => TRUE
ehsasssss => FALSE
a test => TRUE
yeeeeee => FALSE
test => TRUE
mohammad => TRUE
ali => TRUE
mohsen => TRUE
mohsenmlpl => FALSE
allllll => FALSE
allilllllo => FALSE
thisisatest => TRUE
zagros => TRUE
4o54o45646o => FALSE
therhythm => FALSE
theg+vowel => TRUE
gbcvcvrt => FALSE
user3109875 => FALSE