例如:
- 给定字符串
PncC1KECj4pPVW
,它会被写入文本文件,因为它同时包含数字和字母。
- 给定字符串 qdEQ
,它不会被写入文本文件,因为它只包含字母。有什么方法可以做到这一点吗?
我尝试使用
$string = PREG_REPLACE("/[^0-9a-zA-Z]/i", '', $buffer);
但是它没有起作用。
任何帮助都将不胜感激。
PncC1KECj4pPVW
,它会被写入文本文件,因为它同时包含数字和字母。
- 给定字符串 qdEQ
,它不会被写入文本文件,因为它只包含字母。$string = PREG_REPLACE("/[^0-9a-zA-Z]/i", '', $buffer);
但是它没有起作用。
任何帮助都将不胜感激。
看起来最简单的方法就是用两个正则表达式来实现。
if (preg_match('/[A-Za-z]/', $myString) && preg_match('/[0-9]/', $myString))
{
echo 'Contains at least one letter and one number';
}
我认为另一种方法是如下所示。它表示“首先是一个字母,然后在某个时候是一个数字(或反之亦然)”。但我认为上面那个更易读。
if (preg_match('/[A-Za-z].*[0-9]|[0-9].*[A-Za-z]/', $myString))
{
echo 'Contains at least one letter and one number';
}
if (preg_match('/[A-Za-z].*[0-9]|[0-9].*[A-Za-z]/', $myString))
{
echo 'Secure enough';
}
根据https://dev59.com/qGox5IYBdhLWcg3wOx_9#9336130的回答进行了更新,感谢https://stackoverflow.com/users/116286/jb
9877abc
将无效。 - Jonathan M这个工作干净利落:
$myString="abc123";
if( preg_match('([a-zA-Z].*[0-9]|[0-9].*[a-zA-Z])', $myString) )
{
echo('Has numbers and letters.');
} else {
echo("no");
}
ab!c1
返回true,因为它只匹配c1
。虽然我确实喜欢那个phptester网站,所以谢谢你向我展示它。 - jb.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]
~([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])~');
我建议使用第一个解决方案。第二个解决方案对我来说看起来效率低下且难以阅读。仍需手动检查长度。
PHP中有一个内置的函数可以实现此功能。它被称为ctype_alnum
。
if(!ctype_alnum($string)) {
return $error;
}
// Continue on your way...
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
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
用于检查字符串是否包含数字的代码!!
function ContainsNumbers($String){
return preg_match('/\\d/', $String) > 0;
}
这些答案有些不靠谱...我喜欢最短、最干净的解决方案。这是我基本的库,我在制作游戏时更新和改进了20年。是的,PHP有一些内置函数来检查其中的一些内容,但我喜欢简单、简短的单词函数。
以下是两个示例,都使用我的函数执行完全相同的操作。
$fullname = abcSpc($_POST['fullname']) ? $_POST['fullname'] : false;
// Same As
if(abcSpc($_POST['fullname']){ $fullname=$_POST['fullname']; } else { $fullname=false; }
我的图书馆
// BASIC FUNCTIONS, JAYY's LIBRARY
function abc ($input){ return preg_match('/^[A-Z]+$/i', $input); }
function abcSpc ($input){ return preg_match('/^[a-z][a-z\ ]*$/i', $input); }
function abcNum ($input){ return preg_match('/^[A-Z0-9]+$/i', $input); }
function abcNumSpc ($input){ return preg_match('/^[A-Z0-9\ ]+$/i', $input); }
function abcNumU ($input){ return preg_match('/^[A-Z0-9_-]+$/i', $input); }
function abcNumD ($input){ return preg_match('/^[A-Z0-9-]+$/i', $input); }
function num ($input){ if(strlen($input) > 24){ $input=0; }if(!preg_match('/^[0-9]+$/', $input)){ $input=0; } return $input; }
function numU ($input){ return preg_match('/^[0-9_-]+$/i', $input); }
function is_odd($num){ return($num & 1); }
function email ($input){ return filter_var($input, FILTER_VALIDATE_EMAIL); }
function is_url($input){ return preg_match('/^(http|https):\/\/[a-z0-9]+([\-\.]{1}[a-z0-9]+)*\.[a-z]{2,5}'.'((:[0-9]{1,5})?\/.*)?$/i',$input); }
function is_uri ($input){ return preg_match('/^[a-z0-9-]+$/i', $input); }
U = 下划线,D = 破折号...
注意:num() 检查字符串长度,因为五到十年前的某个玩家发现,如果输入一个非常大的数字,它会破坏 num() 并产生一个不仅仅是数字的字符串。你可以删除它或从我的经验中学习。那个玩家最终获得了数百万免费的战争单位,摧毁了游戏的整个回合。找出他做了什么并不好玩。
我希望这能帮助到某些人。这是我的第一篇帖子,我通常不参与讨论。我只是喜欢阅读和从别人的错误中学习。如果你们看到改进的空间,请随意为我改进我的库。
[0-9]
更简单的写法是 \d
。$input = 0;
很奇怪,应该改为 return false;
。在 /^[0-9_-]+$/i
中没有需要忽略大小写的内容。字符类中的 .
和空格不需要转义以便被当做字面量处理。(http|https)
更简单的写法是 https?
。($num & 1)
不需要括号。 - mickmackusa给你。下面的函数检查并返回 TRUE,如果字符串包含字母字符(不仅来自拉丁字母表,还支持西里尔字母、希腊字母、希伯来字母和其他字符),并且它包含数字字符(数字)。函数需要同时存在数字和非数字(但是字母)字符才能返回 TRUE。
function is_good_string($s) {
return preg_match('/\w/u', $s, $dummy) && // any alphabetic unicode character
preg_match('/\d/', $s, $dummy) && // AND digit
preg_match('/\D/', $s, $dummy); // AND non-digit
}