私はRuby on Rails 3.1.0を使用しています。これらの文字を含む文字列をデータベースに格納しないようにクラス属性を検証したいと考えています。(空白)、
<
、>
、"
、#
、%
、{
、}
、|
、\
、^
、~
、[
、]
と `` `。文字セットを避けるための正規表現
正規表現とは何ですか?それはまた、非空であるべきと仮定すると、
私はRuby on Rails 3.1.0を使用しています。これらの文字を含む文字列をデータベースに格納しないようにクラス属性を検証したいと考えています。(空白)、
<
、>
、"
、#
、%
、{
、}
、|
、\
、^
、~
、[
、]
と `` `。文字セットを避けるための正規表現
正規表現とは何ですか?それはまた、非空であるべきと仮定すると、
:
^[^\] ><"#%{}|\\^~\[`]+$
誰かがここでは、これをdownvotingされているので、いくつかのテストコードは次のとおりです。
ary = [' ', '<', '>', '"', '#', '%', '{', '}', '|', '\\', '^', '~', '[', ']', '`', 'a']
ary.each do |i|
puts i =~ /^[^\] ><"#%{}|\\^~\[`]+$/
end
出力:
nil
nil
nil
nil
nil
nil
nil
nil
nil
nil
nil
nil
nil
nil
nil
0
a = "foobar"
b = "foo ` bar"
re = /[ \^<>"#%\{\}\|\\~\[\]\`]/
a =~ re # => nil
b =~ re # => 3
逆電子式は次のとおりです。
/\A[^ \^<>"#%\{\}\|\\~\[\]\`]+\Z/
正規表現を使用してすべての文字列を検証します。 – user502052
上記の "b"を除きますか?正規表現は不正な文字列に対して真理値を返し、良い文字列に対しては 'nil'を返すので、ロジックを逆にする必要があります。 – d11wtq
利用可能な '=〜'の逆数があり、これは '!〜'です。 'b!〜re#=> false'のように。 – d11wtq
bad_chars = %w(< > " # % { } | \^~ [ ] ')
re = Regexp.union(bad_chars)
p %q(hoh'oho) =~ re #=> 3
Regexp.union
は、エスケープの世話をします。
+1 Regexp.union –
@ Octopus-Paul: ']'は文字クラスを終了し、 '\ s'シーケンスは文字クラス内では機能しません。 – porges
@Porges '\ s'は文字クラス内でうまく動作します。 – d11wtq
@ d11wtq:訂正されました:) – porges