2016-10-06 2 views
3

こんにちは私はフロートだけを受け入れる必要があるテキストボックスを検証しています。私はこの正規表現を使用して、それを検証するために正規表現の中にユーザー定義の文字列を追加する方法

^(?:[1-9]\\d*|0)?(?:[.]\\d+)?$ 

を使用します。それは期待どおりに動作します。今私は正規表現の中にユーザー定義の文字列を追加して、その意味が変わるべきでないようにしたい。方法はありますか?

+1

"?(?:(?:[1-9] \\ d * | 0)?(?:[?] \\ d +)?| MY STRING)?" " 。 'MY STRING'がリテラルとして扱われるべきユーザ入力変数なら、' Pattern.quote(user_str) 'だけを使用してください。 (Javaの場合) –

+0

Javaで書かれていますか? –

答えて

2

入力が浮動小数点数であるかどうかを検証するには、ほとんどの場合正規表現は必要ありません。組み込みクラスを使用して文字列入力を解析し、文字列が別のものかどうかを確認するには対応する文字列メソッドを使用します。

あなたは、コードへのアクセスがない場合は、alternation使用できます

"^(?:(?:[1-9]\\d*|0)?(?:[.]\\d+)?|MY STRING)?$" 
    ^^^       ^^^^^^^^^^^^ 

regex demo is here

要するに

  • ^ - 文字列の先頭を
  • (?: - オプションの非キャプチャグループの開始
    • (?:[1-9]\d*|0)?(?:[.]\d+)? - 以前パターン
    • | - 又は
    • MY STRING - リテラルMY STRINGサブ
  • )? - オプション(起因?に)非キャプチャグループ
  • $の終わり - 文字列の末尾

MY STRINGがリテラルとして扱われるべきユーザ入力変数であり、コードにアクセスできる場合はであれば、その文字列をいくつかの正規表現のエスケープ方法(Javaの場合はPattern.quote(user_str))でエスケープすると考えるべきです。

+1

それは素晴らしいですそれは完璧に動作します –

関連する問題