2016-04-22 14 views
2

xsdxmlを検証しようとしています。 フィールドの1つは、オプションのフィールドで、値を含むこともありません。私の場合は、コンピュータのIPです。 xsd正規表現をチェックして、IP形式であることを確認しますが、空になると検証できません。ここで正規表現または空の文字列が機能しない

は、私は、次の正規表現を使用IPを検証するためにexample

です:見ての通り、私が使用する(IP表現のための正規表現を)試してみました

((([1-9]?[0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\.){3}([1-9]?[0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5]))|($) 

を| ($) しかし空の文字列では機能しません。

私は間違っていますか?どうすれば修正できますか? ありがとうございました

+1

空文字列は: '^ \ s * $' – rock321987

+0

また試してみましたが、動作していません:http://www.utilities-online.info/x sdvalidation /?save = a30e536f-4ede-41a8-8a62-6822bdc50319-xsdvalidation#.Vxo3_TCLT4Y – Mayday

答えて

1

正規表現にバグがあります。エスケープされていない.は任意の文字に一致します。あなたはそれをエスケープするか、または文字クラスの中に入れることができます。 [.]となり、リテラルのピリオド(ドット)にのみ一致するようになりました。空の文字列を一致させるには、ちょうど最後に?数量詞を追加します。

((([1-9]?[0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])[.]){3}([1-9]?[0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5]))? 
               ^^^ (dot inside a char class)      ^- The whole pattern can match 1 or 0 times 

regex demo

も空白行を一致させるには、あなたが代替を追加する必要があります参照してください。

(\s*|((([1-9]?[0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])[.]){3}([1-9]?[0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5]))) 
^^^^ 

another regex demo

+1

これは動作しているようですが、ありがとうございます! – Mayday

関連する問題