次の規則に従う必要がある文字列を検証するための正規表現を作成しました。
- 少なくとも 1 文字である必要があります
- 空白文字を含めることはできません
- 最初の文字は句読点であってはなりません
- 最後の文字は句読点であってはなりません
- 数字が続く句読点で終わることはできません
- 他のすべての文字は、. 以外の任意の UTF-8 文字にすることができます
/[:@#]
。
正規表現は次のとおりです。
my $name_re = qr/
[^[:punct:][:blank:]] # not punct or blank
(?: # followed by...
[^[:blank:]:@#]* # any number non-blank, non-@, non-#, non-@
[^[:punct:][:blank:]] # one not blank or punct
)? # ... optionally
/x;
足りないものがありますか?ルール 5 は適用されません。私はこのようなコードを書くことによってそれを強制してきました:
die "$proj is not a valid name" unless $proj =~ /\A$name_re\z/
&& $proj !~ /[[:punct:]][[:digit:]]+\z/;
これを行わなければならない場所がたくさんあるので、すべてを単一の正規表現で実行したいと思います。問題は次のとおりです。「foo,23」などの値を拒否する正規表現は?