3

そこで、オプションのアパート番号を含むテキストボックスを制限したかったのです。

問題の正規表現は次のとおりです。

([0-9]{1,4}[A-Z]?)|([A-Z])|(^$)

簡単ですね。

私はこれらのツールを使用して正規表現をテストしています:正規表現
アナライザー正規表現
バリデーター

期待される結果は次のとおりです。

  • 有効
    • 「1234A」
    • 「Z」
    • 「(空の文字列)」
  • 無効
    • 「A1234」
    • "fhfdsahds527523832dvhsfdg"

明らかに、私がここにいる場合、無効なものは正規表現によって受け入れられます。この正規表現の目的は、オプションの文字を含む1〜4の数字、または1つの文字または空の文字列を受け入れることです。

何が機能していないのか理解できないようです。つまり、ここにある単純な正規表現です。正規表現があまり得意ではないので、おそらく何かが足りないのですが、この構文は私の目には問題ないようです。うまくいけば、ここの誰かが私のエラーを指摘することができます。

すべての助けに感謝します、それは大いに感謝されます。

4

2 に答える 2

3

^最初の2つのオプションにも、$アンカーを使用する必要があります。また、2番目のオプションを最初のオプションに含めることもできます(これは3番目のバリアントにもすぐに一致します)。

^[0-9]{0,4}[A-Z]?$

アンカーがないと、文字列内のどこからでも1文字だけが選択されるため、正規表現は一致します。

于 2012-10-12T20:48:34.407 に答える
1

言語によっては、ネガティブな先読みを使用することもできます。

^[0-9]{0,4}[A-Za-z](?!.*[0-9])

壊す:

^[0-9]{0,4}  =  This look for any number 0 through 4 times at the beginning of the string
[A-Za-z]     =  This look for any characters (Both cases)
(?!.*[0-9])  =  This will only allow the letters if there are no numbers anywhere after the letter.

ヌル文字に対して検証する方法を完全には理解していませんが、使用している言語に関係なく、ツールを使用する方が簡単な場合があります。この論理に沿った何か:

if String Doesn't equal $null Then check the Rexex

それらの線に沿った何か、あなたがあなたの言語でそれをするであろう方法のためにちょうど調整されました。

答えを検証するためにRegExスキナーを使用しました。

編集:コメントからのエラーを修正

于 2012-10-12T20:58:57.177 に答える