PHP检查一个字母和一个数字

PHP检查一个字母和一个数字,php,regex,string,Php,Regex,String,如何在PHP中检查字符串是否至少是一个字母和一个数字?可以有特殊字符,但基本上需要有一个字母和一个数字 示例: $string = 'abcd' //Return false $string = 'a3bq' //Return true $string = 'abc#' //Return false $string = 'a4#e' //Return true 谢谢。试试这个 if (preg_match('/[A-Za-z]/', $string) & preg_ma

如何在PHP中检查字符串是否至少是一个字母和一个数字?可以有特殊字符,但基本上需要有一个字母和一个数字

示例:

$string = 'abcd'   //Return false
$string = 'a3bq'   //Return true
$string = 'abc#'   //Return false
$string = 'a4#e'   //Return true
谢谢。

试试这个

if (preg_match('/[A-Za-z]/', $string) & preg_match('/\d/', $string) == 1) {
    // string contains at least one letter and one number
}
试试这个

if (preg_match('/[A-Za-z]/', $string) & preg_match('/\d/', $string) == 1) {
    // string contains at least one letter and one number
}

您要查找的模式是^.*(?=.*\d)(?=.*[a-zA-Z]).*$

使用中:

if( preg_match( "/.*(?=.*\d)(?=.*[a-zA-Z]).*/", $string ) )
     echo( "Valid" );
else
     echo( "Invalid." );

您要查找的模式是^.*(?=.*\d)(?=.*[a-zA-Z]).*$

使用中:

if( preg_match( "/.*(?=.*\d)(?=.*[a-zA-Z]).*/", $string ) )
     echo( "Valid" );
else
     echo( "Invalid." );

如果拉丁字母和数字为:

if (preg_match('/[a-z0-9]+/i', $search_string)) { ... has at least one a-zA-Z0-9 ... }

如果拉丁字母和数字为:

if (preg_match('/[a-z0-9]+/i', $search_string)) { ... has at least one a-zA-Z0-9 ... }


我不确定
\d
是否等同于
[0-9]
,或者它是否匹配PHP中的十进制数字,所以我没有使用它。使用与正确内容匹配的
\d
[0-9]
\p{Nd}
中的任何一个



我不确定
\d
是否等同于
[0-9]
,或者它是否匹配PHP中的十进制数字,所以我没有使用它。请使用与正确内容相匹配的
\d
[0-9]
\p{Nd}
中的任何一个。

对不起,“字母数字”内容困扰着我,因为这意味着它只包含字母和/或数字。这更有道理。对不起,“字母数字”这个东西让我感到困扰,因为这意味着它只包含字母和/或数字。这更有意义。抱歉,应该更加关注这个问题:)@Phil的解决方案是正确的。抱歉,应该更加关注这个问题:)@Phil的解决方案是正确的。我删除了第一个“
*
”,因为它只会导致无用的回溯。我删除了尾随的“
*$
”,因为它总是匹配的。您测试的是哪个字符串?我根据OP提供的字符串测试了我的更改。老兄,你现在所拥有的比你开始的还要糟糕。如果要使用lookaheads,
preg_-match(“/^(?=.*\d)(?=.[a-zA-Z])/”,$string)
preg_-match(“/^(?=.*\d)。*[a-zA-Z]/”,$string)
要快得多,尤其是在没有匹配的情况下。(最多NN个检查,而不是最多NN*N个检查。)我删除了第一个“
*
”,因为它只会导致无用的回溯。我删除了尾随的“
*$
”,因为它总是匹配的。您测试的是哪个字符串?我根据OP提供的字符串测试了我的更改。老兄,你现在所拥有的比你开始的还要糟糕。如果要使用lookaheads,
preg_-match(“/^(?=.*\d)(?=.[a-zA-Z])/”,$string)
preg_-match(“/^(?=.*\d)。*[a-zA-Z]/”,$string)
要快得多,尤其是在没有匹配的情况下。(最多NN个检查,而不是最多NN*N个检查。)@ikegami:两种方法都可以。Phil对结果进行数字相加,并将结果与值2进行比较。如果你扔掉
==2
,你也可以将
+
替换为
&
,并进行逻辑and运算。@ikegami As
preg_match()
返回一个整数(
0
1
),我认为对
2
的添加和比较更合适。也可以使用
a&b==1
@ikegami:unagree。对我来说,数字方式更清晰。
a&&b
的方式会让那些不知道透明的
(int)->(bool)
的人感到困惑。在这种情况下,透明地转换PHP就可以了。@ikegami:Hm,我想我最好说“自动转换”而不是“透明转换”。逻辑AND(
&&
需要布尔参数。如果他们不是,PHP会的。@ikegami见<如果$a和$b都为真,则代码>$a&&$b计算结果为真。TRUE是布尔类型。如果其中一个不是明确的布尔型,那么它们将是。这是我不喜欢的自动转换,因此在我的answer@ikegami:你可以两种方式都做。Phil对结果进行数字相加,并将结果与值2进行比较。如果你扔掉
==2
,你也可以将
+
替换为
&
,并进行逻辑and运算。@ikegami As
preg_match()
返回一个整数(
0
1
),我认为对
2
的添加和比较更合适。也可以使用
a&b==1
@ikegami:unagree。对我来说,数字方式更清晰。
a&&b
的方式会让那些不知道透明的
(int)->(bool)
的人感到困惑。在这种情况下,透明地转换PHP就可以了。@ikegami:Hm,我想我最好说“自动转换”而不是“透明转换”。逻辑AND(
&&
需要布尔参数。如果他们不是,PHP会的。@ikegami见<如果$a和$b都为真,则代码>$a&&$b计算结果为真。TRUE是布尔类型。如果其中一个不是明确的布尔型,那么它们将是。我不喜欢这种自动转换,因此在我的答案中有明确的比较
preg_match('/^(?=.*\pL).*\p{Nd}/', $string)