2011-11-08 4 views
3

좋아, 그래서 우리는 4 가지 주요 분류 중 3 가지를 요구하는 암호 정책에 대한 암호 검사기를 쓰고 있습니다. 문제가있는 곳은 특수 문자 일치입니다.모든 특수 문자에 대한 Preg_match, 암호 확인

는 여기에 내가 지금까지이 작업은 다음과 같습니다

private function PasswordRequirements($ComplexityCount) { 
    $Count = 0; 
    if(preg_match("/\d/", $this->PostedData['password']) > 0) { 
     $Count++; 
    } 
    if(preg_match("/[A-Z]/", $this->PostedData['password']) > 0) { 
     $Count++; 
    } 
    if(preg_match("/[a-z]/", $this->PostedData['password']) > 0) { 
     $Count++; 
    } 
    // This is where I need help 
    if(preg_match("/[~`[email protected]#$%^&*()_-+=\[\]{}\|\\:;\"\'<,>.]/", $this->PostedData['password']) > 0) { 
     $Count++; 
    } 

    if($Count >= $ComplexityCount) { 
     return true; 
    } else { 
     return false; 
    } 
} 

그래서 기본적으로 제가 각각의 경우, 숫자, 대문자, 소문자, 특수 문자의 캐릭터를 검사하고 있어요. 특수 문자에 대한 제한이 없으며 유니 코드 문자도 필요합니다. 이 경우 \ W가 작동합니까 아니면 다시 숫자가 포함됩니까? \ W에 대한 훌륭한 문서를 찾을 수 없어이 부분에 대해 명확하지 않습니다.

누구나 쉽게 숫자와 문자를 포함하지 않는 모든 특수 문자와 유니 코드 문자를 처리 할 수있는 정규식을 알고 있습니까?

누구나이 것을 사용하는 사람이 많아서 생각합니다.

+0

여기 몇 가지 추측을 설명하는 멋진 페이지가 있습니다. http://www.regular-expressions.info/reference.html – Marcus

답변

12

이 패턴은 숫자 또는 -Z가 아닌 모든 문자를 허용합니다. 이 [A-Za-z0-9_]과 동일한 부정 \w, 년대 \W 대하여

[^\da-zA-Z] 

. 따라서 \W은 영어 문자, 숫자 또는 밑줄이 아닌 모든 문자가됩니다.

정규 표현식 학습을위한 this is a great resource에 대한 의견으로 언급했습니다. 여기 test the regex에 대한 유용한 사이트가 있습니다.

+0

나는 머리를 때리고있다. 이전 수표의 역순으로 생각조차하지 않으셔서 고맙습니다. 그리고 도움이 될 자원에 대해 감사드립니다. - 제프 – Jeff

+0

그리고 매우 빠른 응답을 주셔서 감사합니다 – Jeff

2

당신은 '특수'문자의 POSIX 문자 클래스 [[:punct:]]를 사용할 수 있습니다

<?php 
$regex = '[[:punct:]]'; 

if (preg_match('/'.$regex.'/', 'somepas$', $matches)) { 
    print_r($matches); 
} 
?> 

가 제공합니다 경우

Array 
(
    [0] => $ 
) 
7

는 특수 문자에 일치시킬

preg_match('/[\'\/~`\[email protected]#\$%\^&\*\(\)_\-\+=\{\}\[\]\|;:"\<\>,\.\?\\\]/', $input) 
관련 문제