我想檢測一個字符串是否包含數字和字母。檢查一個字符串是否包含數字和字母
例如:
- 鑑於
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].*[0-9]|[0-9].*[A-Za-z]/', $myString))
{
echo 'Secure enough';
}
回答更新基於https://stackoverflow.com/a/9336130/315550,日Thnx到https://stackoverflow.com/users/116286/jb
@Duncan,這隻有在字母出現在數字前纔有效。不適用於'9877abc'。 – 2012-02-17 21:58:44
非常感謝這些作品,我明白它的工作原理。 – 2012-02-17 21:59:22
這對於'a2'或'A2'也不適用# – 2012-02-17 22:02:37
這工作乾淨利落:
$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
這適用於字母,然後數字,或數字,然後字母。但是,它允許其他角色(因爲你沒有說在帖子中排除他們)。 – 2012-02-17 22:05:33
已更新爲非字母數字。 – 2012-02-17 22:30:28
您的非字母數字版本讓我想要。如果我想要中間的號碼怎麼辦? – 2012-02-17 22:34:43
如果你想匹配只有字母數字字符(也就是說,把字符串視爲只要還有其他內容,就像空格或特殊字符一樣無效),這應該起作用。
否則,只要刪除第一個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
看來最簡單的方法就是在兩個正則表達式中完成它。
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';
}
@Downvoter,你能解釋一下嗎? – 2012-02-17 22:14:03
我沒有downvoted,但你的第一個和第二個解決方案將匹配「000 aaaa 111」,我認爲這應該被認爲是無效的(只有「000aaaa111」等,該字符串不應該包含除字母數字之外的其他字符) - 然而OP沒有具體說明「000 aaaa 111」應該被認爲是無效的,但是給出的例子表明了這種行爲。 – 2012-02-17 22:22:56
@FrostyZ你很對,但問題並不是說它不應該包含其他字符。我以書面形式回答了這個問題。 – 2012-02-17 22:26:08
我唯一的問題是是否必須是一個正則表達式。我會選擇兩三個(因爲你必須建立一個複雜的正則表達式來一次完成。
比方說,你需要有:
[A-Z]
[a-z]
\d
該easies T和最有效的解決方案:
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])~');
而且還必須手動檢查長度。第二種解決方案看起來相當無效,難以閱讀。我的建議:與第一個一起去。
檢查字符串是否包含數字或不!
function ContainsNumbers($String){
return preg_match('/\\d/', $String) > 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
嘿這裏有以下一些原則:
問題:在字符串 對於例如裏面的數字沒有驗證
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]/
它說前幾個字符,然後在一些點數。
PHP有一個內置函數。它叫做ctype_alnum
。
if(!ctype_alnum($string)) {
return $error;
}
// Continue on your way...
這是一個很棒的功能。但是,它不回答OP,因爲它只檢查字符串是否包含字母或數字。它不驗證該字符串是否包含兩者。 – butlerblog 2017-10-09 14:11:55
[A-ZA-Z]與A/I改性劑是一種同義反復 – 2012-02-17 21:53:51
@MarkBaker的,因爲當你想使_sure_它的東西是不區分大小寫:) – 2012-02-17 22:00:33
被允許在字符串中的非字母數字字符? – 2012-02-17 22:26:47