我想检测字符串是否包含数字和字母.
例如:
PncC1KECj4pPVW,它将被写入文本文件,因为它包含两者.qdEQ,它不会,因为它只包含字母.有没有办法做到这一点?
我试图用
$string = PREG_REPLACE("/[^0-9a-zA-Z]/i", '', $buffer);
Run Code Online (Sandbox Code Playgroud)
但它没有用.
任何帮助,将不胜感激.
jb.*_*jb. 52
似乎最简单的方法就是在两个正则表达式中做到这一点.
if (preg_match('/[A-Za-z]/', $myString) && preg_match('/[0-9]/', $myString))
{
echo 'Contains at least one letter and one number';
}
Run Code Online (Sandbox Code Playgroud)
我想另一种方法是在下面这样做.它写着"一封信,然后在某个时刻点上一个数字(反之亦然)".但上面的那个更容易阅读IMO.
if (preg_match('/[A-Za-z].*[0-9]|[0-9].*[A-Za-z]/', $myString))
{
echo 'Contains at least one letter and one number';
}
Run Code Online (Sandbox Code Playgroud)
Moh*_*aji 26
if (preg_match('/[A-Za-z].*[0-9]|[0-9].*[A-Za-z]/', $myString))
{
echo 'Secure enough';
}
Run Code Online (Sandbox Code Playgroud)
答案根据/sf/answers/653529131/更新,thnx到/sf/users/8140051/
这很干净:
$myString="abc123";
if( preg_match('([a-zA-Z].*[0-9]|[0-9].*[a-zA-Z])', $myString) )
{
echo('Has numbers and letters.');
} else {
echo("no");
}
Run Code Online (Sandbox Code Playgroud)
要查看它的实际效果,请将其复制并粘贴到此处:http://phptester.net/index.php?lang = en
我唯一的问题是,是否必须是一个正则表达式.我会选择两到三个(因为你必须建立一个复杂的正则表达式才能立刻完成它.
假设您需要:
[A-Z][a-z]\d最简单,最有效的解决方案:
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";
}
Run Code Online (Sandbox Code Playgroud)
否则,在一个正则表达式中,您将不得不考虑几个选项:
[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])~
Run Code Online (Sandbox Code Playgroud)
当然你可以去(当需要检查大小写时):
preg_match( '~([a-z][A-Z]|[a-z][A-Z])~');
Run Code Online (Sandbox Code Playgroud)
并且仍然需要手动检查长度.第二个解决方案似乎非常无效,很难读给我看.我的建议:跟第一个一起去.
PHP有一个内置函数.它被称为ctype_alnum.
if(!ctype_alnum($string)) {
return $error;
}
// Continue on your way...
Run Code Online (Sandbox Code Playgroud)