2

これを使用して、ColdFusion 7 で「強力な」パスワードを検証 (試行) しています。

if ( REFind("^(?=.*[A-Z])(?=.*[!@##$&*])(?=.*[0-9])(?=.*[a-z]).{6}$", myPassword, 1) EQ 0 )

しかし、それは失敗しています。誰かが私のエラーを指摘できますか?

私がテストしていると思う基準は次のとおりです。

  • 1アッパー
  • 1 下
  • 1 番号
  • 1 特殊文字
  • 最小6桁

非 CF の人々のための脚注:

  • ダブル ハッシュは CF ハッシュをエスケープするためのものです。
  • ColdFusion は正規表現エンジンとして Jakarta ORO 2.0.6 を使用します。
4

4 に答える 4

6

さて、あなたがテストしようとしている基準のセットは悪いです。

たとえばPa$5word、基準を満たしているが悪い選択である一方my name |z NOT Fr£dで、はるかに強いが失敗している (数字がない、異なる記号)。

理想的には、既存のパスワード強度チェッカーを探す必要があります (ただし、既存の/優れたものがあるかどうかはわかりません)。


とにかく、あなたが尋ねたことに対する簡単な解決策として、チェックされていることを正確に説明するには、次のようにします。

<cfif NOT 
    ( len(myPassword) GTE 6
    AND refind('[A-Z]',myPassword)
    AND refind('[a-z]',myPassword)
    AND refind('[0-9]',myPassword)
    AND refind('[!@##$&*]',myPassword)
     )>

すべてを単一の正規表現に押しつぶす必要や利点はありません。

于 2012-06-13T14:14:26.973 に答える
0

失敗する理由の1つは、ビジネスルールが「少なくとも6文字」であるためですが、正規表現では正確に6文字が適用されます。

また、どの条件で失敗するかを述べておくと役に立ちます。私の表面的なテストは、私が上で述べた警告を除いて、あなたが大丈夫であることを示唆しています。質問を微調整して、私が考えていない非表面的なテストが失敗していることを指摘できれば、それは役に立ちます。

現実の世界では、あなたがどの句読文字が有効だと考えるかも期待します。あなたのリストは少し短いです。しかし、それはあなたの現在の問題とは関係ありません。

于 2012-06-13T07:19:25.853 に答える
0

これを試して。

^(?=. [AZ])(?=. [!@##\$& ])(?=. [0-9])(?=.*[az]).{6,}$

6 文字以上を許可するため、6 の後にコンマを追加し、$ は \$ でエスケープする必要があります

アップデート

以下を試して、^と$を上から削除してください

(?=. [AZ])(?=. [!@##$& ])(?=. [0-9])(?=.*[az]).{6,}

于 2012-06-13T10:54:57.820 に答える
0

さまざまな文字の失敗を区別する fwiw:

<cfscript> raRe=[["[a-z]","lowercase"],["[A-Z]","uppercase"],["[\W]","non-alphanumeric"],["[\d]","numeric"]];</cfscript>
<cfoutput>
 <cfloop from=1 to=4 index="idxRe">
  #idxRe#: refind(raRe[idxRe][1], myPassword):<b>#refind(raRe[idxRe][1], myPassword)#</b> myPassword:<b>#myPassword#</b>; re:<b>#raRe[idxRe][1]#</b>; <br />
  <cfif refind(raRe[idxRe][1], myPassword) eq 0><b>Your password must include at least one #raRe[idxRe][2]# character</b><br /></cfif>
 </cfloop>
</cfoutput>

もちろん >=6 も必要な場合:

<cfif Len(myPassword) lte 6><b>Your password must be at least 6 characters long</b></cfif>
于 2013-01-22T17:21:28.667 に答える