检查字符串是否包含数字和字母

时间:2012-02-17 21:49:02

标签: php

我想检测一个字符串是否包含数字和字母。

例如:

  • 鉴于PncC1KECj4pPVW,它将被写入文本文件,因为它包含两者。
  • 鉴于qdEQ,它不会,因为它只包含字母。

有没有办法做到这一点?

我正在尝试使用

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

但它不起作用。

任何帮助都将不胜感激。

9 个答案:

答案 0 :(得分:49)

似乎最简单的方法就是在两个正则表达式中进行。

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';
}

答案 1 :(得分:23)

if (preg_match('/[A-Za-z].*[0-9]|[0-9].*[A-Za-z]/', $myString))
{
    echo 'Secure enough';
}

根据https://stackoverflow.com/a/9336130/315550,thnx更新为https://stackoverflow.com/users/116286/jb

,更新了答案

答案 2 :(得分:7)

这很干净:

$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

答案 3 :(得分:7)

我唯一的问题是,是否必须是一个正则表达式。我会选择两到三个(因为你必须建立一个复杂的正则表达式才能立即完成。

假设您需要:

  • 至少一个大写字母[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 :(得分:6)

PHP有一个内置函数。它被称为ctype_alnum

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

答案 5 :(得分:0)

如果你想只匹配 字母数字字符(也就是说,只要字符串中有其他内容就像字符一样无效,比如空格或特殊字符),这应该可行。

否则,只需删除第一个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

答案 6 :(得分:0)

用于检查字符串是否包含数字!!

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

答案 7 :(得分:0)

如果您需要支持多种语言,则从PHP 5.1中为字符类型listed here添加了其他转义序列。

以下功能利用了这一功能,允许您检查多个字母表中的字母和数字:

检查字符串中是否存在任何字母:

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

答案 8 :(得分:-2)

嘿,这里有一些指导方针:

问题:对字符串内的数字没有验证 对于例如

 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]/

它表示第一个字符,然后是某些点数字。