4

次の要件を満たす正規表現が必要です。

  • 文字、ピリオド、および空白のみが許可されます。
  • 文字列の先頭と末尾に空白はありません。
  • 文字列の途中の空白は問題ありませんが、空白が 2 つ連続することはできません。

一致:

"Hello world."
"Hello World. This is ok."

一致しない:

" Hello World. "
"Hello world 123." 
"Hello  world."

これは私の場合はうまくいきました

<asp:RegularExpressionValidator ID="revDescription" runat="server" 
                                ControlToValidate="taDescription" Display="Dynamic" ErrorMessage="Invalid Description." 
                                Text="&nbsp" 
                                ValidationExpression="^(?i)(?![ ])(?!.*[ ]{2})(?!.*[ ]$)[A-Z. ]{8,20}$"></asp:RegularExpressionValidator>
4

2 に答える 2

2

アンカー否定先読みアサーションを使用して、空白の規則に従っていることを確認するPython のソリューションを次に示します。

regex = re.compile(
    """^          # Start of string
    (?![ ])       # Assert no space at the start
    (?!.*[ ]{2})  # Assert no two spaces in the middle
    (?!.*[ ]$)    # Assert no space at the end
    [A-Z. ]{8,20} # Match 8-20 ASCII letters, dots or spaces
    $             # End of string""", 
    re.IGNORECASE | re.VERBOSE)
于 2014-01-05T10:25:20.980 に答える
0

正規表現の外側の長さを確認することをお勧めします。そうしないと、式が複雑になりすぎる可能性があります。

JavaScript のスニペットの例を次に示します。

if (str.length < 8 || str.length > 20)
  return false;
if (str.match(/(^\s|\s$|\s\s|[^A-Za-z.\s])/))
  return false;

正規表現は、禁止されたパターンのいずれかに一致するかどうかをチェックします。

  • ^\s先頭の空白
  • \s$最後の空白
  • \s\s2 つの連続する空白文字
  • [^A-Za-z.\s]文字、ピリオド、空白以外の文字

スペース (ASCII 32) のみを許可し、タブやその他の空白文字を許可しない場合は、すべて\sをリテラルのスペース文字に置き換えることができます。

別の解決策は、許可された文字と長さをチェックする「肯定的な」表現と、拒否されたパターンを除外するための「否定的な」表現の組み合わせです。

return str.match(/[A-Za-z. ]){8,20}/) && !str.match(/(^ | $|  )/);

更新:すべてを単一の式に入れる必要がある場合は、連続したスペースのチェックを省略しなければならないことを残念に思います。この制限により言語が文脈依存になり、正規表現ではチェックできないためです。できることは、文字で始まり、その後に 6 ~ 18 個の文字、ドット、またはスペースが続き、文字で終わる文字列をチェックすることです。

[A-Z][A-Z. ]{6,18}[A-Z]
于 2014-01-05T10:50:46.993 に答える