私は正規表現を使ってパスワードの強さをチェックするためにCプログラムにコードを書いています。
私の要件は次のとおりです。 「少なくとも1つの上部の文字と一つ下の文字一桁と1つの特殊文字や全体的なパスワードの長さが最小9つの文字でなければなりません」Cプログラムでregexを使ってパスワードの強さを確認する
まず私はhttp://regexr.com/で正規表現の組み合わせを考え出したし、正規表現の組み合わせが((?=.*\d)(?=.*[a-z])(?=.*[A-Z])(?=.*[_+-.,[email protected]#$%^&*();\/|<>"']).{9,})
しかし、私はそれが動作しない以下のプログラムを使用してC言語で同じことをしようとした場合:
#include<stdio.h>
#include<ctype.h>
#include<stdbool.h>
#include<sys/types.h>
#include<regex.h>
static void check_password_strength(const char *password) {
regex_t comp_ex;
int rc = regcomp(&comp_ex, "((?=.*\d)(?=.*[a-z])(?=.*[A-Z])(?=.*[_+-.,[email protected]#$%^&*();\/|<>"']).{9,})", 0);
if (rc != 0) {
char errbuf[1024];
(void)(regerror(rc, &comp_ex, errbuf, sizeof(errbuf)));
printf("%s: error compiling regex: %s", __FUNCTION__, errbuf);
return;
}
if (regexec(&comp_ex, password, 0, NULL, 0) == 0) {
regfree(&comp_ex);
printf("Password accepted :%s\n", password);
return;
}
printf("password NOT accepted\n");
regfree(&comp_ex);
return;
}
void main(int argc, char *argv[])
{
int i = 0;
if (argc != 2) {
printf("invalid number of args \n");
return;
}
check_password_strength(argv[1]);
}
私はCプログラムでは異なる方法で正規表現を使用する必要がありますか? [[:alnum:]]
または[[:digit:]]
のように? ご存知の方は、ここでヒントを教えてください。
「少なくとも1つの上の文字と1つの下の文字1桁と1つの特殊文字」これは強力なパスワードを作成する方法ではありません。それがあなたが忘れられないパスワードを作る方法です。これをしないでください。 – Alexander
正規表現はパスワードの解析には適していないと思います。それ以外の場合は、さまざまな文字クラスを任意の順序で使用できるようにする必要があります。これは最高のフィドルです。 –
パターン内の各 '\'(バックスラッシュ)を倍にしてみてください。私は正規表現がこれを行う方法ではないことに同意しますが、単に文字列をスキャンして各要件を数えることができます。 –