Подтвердить что ты не робот

Проверьте, содержит ли строка цифры и буквы

Я хочу определить, содержит ли строка как числа, так и буквы.

Например:

  • Учитывая PncC1KECj4pPVW, он будет записан в текстовый файл, потому что он содержит оба.
  • Учитывая qdEQ, он не будет, потому что он содержит только буквы.

Есть ли способ сделать это?

Я пытался использовать

$string = PREG_REPLACE("/[^0-9a-zA-Z]/i", '', $buffer);

Но это не сработало.

Любая помощь будет оценена.

4b9b3361

Ответ 2

Кажется, что самый простой способ - просто сделать это в двух регулярных выражениях.

if (preg_match('/[A-Za-z]/', $myString) && preg_match('/[0-9]/', $myString))
{
    echo 'Contains at least one letter and one number';
}

Я предполагаю, что другой способ сделать это - это ниже. В нем говорится "письмо, а затем в какой-то момент число (или наоборот)". Но выше, легче читать IMO.

if (preg_match('/[A-Za-z].*[0-9]|[0-9].*[A-Za-z]/', $myString))
{
    echo 'Contains at least one letter and one number';
}

Ответ 3

Мой вопрос только в том, должно ли быть одно регулярное выражение. Я бы пошел с двумя или тремя (потому что вам нужно создать небольшое сложное регулярное выражение, чтобы сделать это сразу.

Скажем, что вам нужно иметь:

  • как минимум один символ верхнего регистра [A-Z]
  • как минимум один символ нижнего регистра [A-Z]
  • хотя бы одно число \d
  • имеет пароль длиной не менее 7 символов

Самое простое и эффективное решение:

if( preg_match( '~[A-Z]~', $password) &&
    preg_match( '~[a-z]~', $password) &&
    preg_match( '~\d~', $password) &&
    (strlen( $password) > 6)){
    echo "Good password";
} else {
    echo "Not so much";
}

В противном случае в одном регулярном выражении вам придется рассмотреть несколько вариантов:

  • [a-z][A-Z]+\d
  • [a-z]\d+[A-Z]
  • [a-z][A-Z]+\d
  • [a-z]\d+[A-Z]
  • \d[a-z]+[A-Z]
  • \d[a-z]+[A-Z]

Присоедините его к одному большому и едва читаемому регулярному выражению "ored", например:

~([a-z][A-Z]+\d|[a-z]\d+[A-Z]|[A-Z][a-z]+\d|[A-Z]\d+[a-z]|\d[a-z]+[A-Z]|\d[A-Z]+[a-z])~

Конечно, вы можете пойти (когда нужно просто проверить верхний и нижний регистр):

preg_match( '~([a-z][A-Z]|[a-z][A-Z])~');

И еще нужно проверить длину вручную. Второе решение кажется довольно неэффективным и трудночитаемым для меня. Моя рекомендация: идти первым.

Ответ 4

Это работает чисто:

$myString="abc123";
if( preg_match('([a-zA-Z].*[0-9]|[0-9].*[a-zA-Z])', $myString) ) 
{ 
    echo('Has numbers and letters.');
} else {
    echo("no");
}

Чтобы увидеть его в действии, скопируйте его и вставьте здесь: http://phptester.net/index.php?lang=en

Ответ 5

PHP имеет встроенную функцию для этого. Он назывался ctype_alnum.

if(!ctype_alnum($string)) {
  return $error;
}
// Continue on your way...

Ответ 6

Если вы хотите сопоставлять только буквенно-цифровые символы (т.е. считайте строку недействительной, как только в ней есть что-то еще, например пробелы или специальные символы), это должно работать.

В противном случае просто удалите первый preg_match().

function myTest($string)
{
  echo "test '".$string."': "
    . intval(preg_match('/^[a-z\d]+$/i', $string) // has only chars & digits
        && preg_match('/[a-z]/i', $string)        // has at least one char
        && preg_match('/\d/', $string))          // has at least one digit
    . "\n";
}

myTest('aAa'); // => 0
myTest('111'); // => 0
myTest('aAa111bbb'); // => 1
myTest('111aAabbb'); // => 1
myTest('aAabbb111'); // => 1
myTest('111bBb222'); // => 1
myTest('111 bBb 222'); // => 0
myTest('$$$$'); // => 0

Ответ 7

для проверки, содержит ли строка числа или нет!

function ContainsNumbers($String){
    return preg_match('/\\d/', $String) > 0;
}

Ответ 8

Если вам нужно поддерживать несколько языков, из PHP 5.1 добавлены дополнительные escape-последовательности для типов символов перечисленных здесь.

Следующие функции воспользуются этим и позволяют проверять буквы и цифры в нескольких алфавитах:

проверить, существует ли какая-либо буква в строке:

function has_letter($x){
    if (preg_match("/[\p{L}]/u",$x)) {
            return true;
    }
    return false;
}

строка проверки содержит любое число

function has_number($x) {
    if (preg_match("/[\p{N}]/u",$x)) {
        return true;
    }
    return false; 
}

Использование

$string = '123اختبا';
has_letter($string); // true


$string = '೪౨౨'; 
has_number($string); // true

Оба вместе в соответствии с запросом

$string='I am 28';
if (has_letter($string)&&has_number($string)){
    // true
}

$string='I am ౨೩೫';
if (has_letter($string)&&has_number($string)){
    // true
}

$string='Привет, друг, как ты?';
has_number($string); // false - this Russian text doesn't contain a number

Ответ 9

Вот несколько рекомендаций ниже:

Проблема: нет подтверждения в строке внутри строки Напр.

 OM  4  OM,   OM4OM   ,  space  OM 4  OM  space,  space  OM4OM space. -----> No valdation over this??

Решение:

if (preg_match("/[A-Za-z].*[0-9]/",$_POST["name"]))
    {
     header("location:http://localhost/Test1.html");
     exit;
    }
Logic:  /[A-Za-z].*[0-9]/

Он говорит о первых символах, а затем о некоторых точках.