4

タイトルの正規表現を作成するには、C#を使用する必要があります。要件は次のとおりです。

  1. タイトルが必要です(長さ> 0)。
  2. 最大256文字(長さ<= 256);
  3. 文字は禁止されていませんが、空白のみが違法です(空白のみを含むタイトルは違法です)。
  4. 先頭または末尾の空白はありません。

私はすでにこれを持っています:

^.{1,256}$

では、どうすればルール3を満たすことができますか?

編集:

  1. ルール3をより明確に説明しました。
  2. マリオの答えからルール4を追加しました。
4

5 に答える 5

2

使用(?=pattern)

@"^(?=.*\S).{1,256}$"

指定されたパターンがこの(?=pattern)場所の直後に存在することを表明します。

したがって、正規表現は、文字列の開始後、パターンと一致し、.*\S文字列全体がパターンと一致する場合にのみ一致します。^.{1,256}$

于 2013-02-03T00:48:04.403 に答える
2

ゼロ幅アサーションを使用する必要があります。

@"^(?=.*\S).{1,256}$"

(?=.*\S)空白以外の文字で終わる文字のシーケンスに一致しますが、残りの一致には影響しません。

于 2013-02-03T00:49:35.447 に答える
2

文字列のクリーンアップと検証を2つの簡単な手順でハードコーディングできるため、正規表現は完全にスキップします。

  • String.Trim(null)すべての先頭/末尾の空白を削除するために使用します。
  • 残りの文字列の長さを比較します。
  • 最初の文字を大文字にします(必要な場合)。

空白のみで構成される名前は長さが0にトリミングされるため、これは機能します。また、これにより、などのタイトルの使用が回避され" Let's go!"ます。

于 2013-02-03T00:55:08.443 に答える
0

[^ \ s]を使用して、空白以外の任意の文字に一致させることができます

于 2013-02-03T00:48:57.227 に答える
0

私自身の答えは私の質問に当てはまりますが、私は他の人の答えの後に私の質問を編集したので、クレジットは他の人に行く必要があります(私は賛成して正解として選択しました)。

=====================

私はついに純粋な正規表現ソリューションを思いつきました(余分な手順はありません)

^(\S|\S.{0,254}\S)$

()(かっこが重要な理由はわかりませんが)

次のテストケースに合格します。

    [TestMethod]
    public void CheckTitleTest()
    {
        // Empty
        Assert.IsFalse(CheckTitle(@""));

        // A whitespace
        Assert.IsFalse(CheckTitle(@" "));

        // Multiple whitespace only
        // http://msdn.microsoft.com/en-us/library/t809ektx.aspx
        Assert.IsFalse(CheckTitle("  \t \n \u1680"));

        // Leading whitespaces
        Assert.IsFalse(CheckTitle("  \tabc"));

        // Trailing whitespaces
        Assert.IsFalse(CheckTitle("abc\t "));

        // Leading and trailing whitespaces
        Assert.IsFalse(CheckTitle("  \tabc\t "));

        // Too long: 257 character
        Assert.IsFalse(CheckTitle(@"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/*"));

        // A normal title
        Assert.IsTrue(CheckTitle(@"This is a normal title"));
        Assert.IsTrue(CheckTitle(@"This is a normal title."));

        // 256 characters
        Assert.IsTrue(CheckTitle(@"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"));

        // A very simple title
        Assert.IsTrue(CheckTitle(@"A"));
        Assert.IsTrue(CheckTitle(@"!"));
        Assert.IsTrue(CheckTitle(@"\"));
    }
于 2013-02-04T03:42:32.000 に答える