Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 如何检查字符串在4个连续字符后是否没有元音_Php_Regex_Char_Preg Replace_Preg Match - Fatal编程技术网

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]
    =>匹配除元音以外的任何内容
  • (?!*?[^aeiou]{5})
    =>负向前看以确保不存在5个连续辅音的情况
  • (?!.[aeiou]{3})
    =>以确保没有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