我想检测一个字符串是否包含数字和字母。
例如:
PncC1KECj4pPVW
,它将被写入文本文件,因为它包含两者。qdEQ
,它不会,因为它只包含字母。有没有办法做到这一点?
我正在尝试使用
$string = PREG_REPLACE("/[^0-9a-zA-Z]/i", '', $buffer);
但它不起作用。
任何帮助都将不胜感激。
答案 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
最简单,最有效的解决方案:
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]/
它表示第一个字符,然后是某些点数字。