如何在连续4个字符后检查字符串是否没有元音

时间:2013-12-31 08:10:08

标签: php regex char preg-replace preg-match

我想检查用户是否输入了接近有效名称的内容。因此,如果它输入类似gbcvcvrt的内容,我会想要验证它并将其标记为不是真名。像theg+vowel这样的东西应该被验证为正确的名称。

在任何长度的字符串上,代码应检测四个连续的非元音字母。 我不希望任何人的名字顺便提一下节奏

考虑

$String = 'therhythm';

我们无法检查前四个字符,我们必须遍历整个字符串并检查四个连续的四个非元音字母表,无论它们位于字符串的哪个位置。这样我们就可以验证$ String是无效的,即使前五个字符会验证它,如果我们检查前四个字母表。

  • 也不应包含3个连续的元音,
  • 不应包含数字,
  • 非字母字符

4 个答案:

答案 0 :(得分:2)

根据您的最新修改:您可以使用以下正则表达式:

^(?!.*?[^aeiou]{5})(?!.*?[aeiou]{3})[a-z]*$

在线演示:http://regex101.com/r/vM0aN9

打破它:

  • [^aeiou] =>匹配除元音之外的任何东西
  • (?!.*?[^aeiou]{5}) =>否定前瞻以确保没有连续5个辅音的情况
  • (?!.*?[aeiou]{3}) =>确保没有3个连续元音的情况
  • [a-z]* =>确保输入中只有字母

答案 1 :(得分:1)

试试这个

<?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);
?>

答案 2 :(得分:1)

^(?![aeiou]{3,})(?:\D(?![^aeiou]{4,}[aeiou]*)(?![aeiou]{4,})){3,}$

这个正则表达式满足您的所有条件:

<?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

答案 3 :(得分:0)

对于测试字符串asdfasdf,请使用以下正则表达式:

([bcdfghjklmnpqrstvwxyz]{3}+)/ig

Online Example

它会捕获3个或更多重复的辅音,你可以用尊敬的逻辑来测试它!

使用PHP你可以尝试这样的事情:

function testString($data) {
    if (!preg_match('/([bcdfghjklmnpqrstvwxyz]{3}+)/', $data)) {
        return 'Valid';
    } else {
        return 'Invalid';
    }
}
echo testString('asasacdDdfasdf');
echo '<br>';
echo testString('Ilia');

Online Example