PHP正規表現がまったく機能しない
次の正規表現を使用しています:
^[0-9.,]*(([.,][-])|([.,][0-9]{2}))?$
この正規表現を使用して有効な価格をチェックしているため、xxx、llddd、34.23dsds などを検出/拒否します。 100 や 120.00 などを許可します 問題は、空白 (空) の場合、有効なものとして渡されることですが、そうすべきではありません。これを変更する方法はありますか?
ありがとう
------------に答える------------
問題の 1 つは、正規表現でドットを使用していることです。fica "任意の文字".ピリオドを意味する場合は、\.
のようにエスケープする必要があります。また、少なくとも 1 つの数字が必要なので、アスタリスク * を「1 つ以上」の + に変更してください。
したがって、最初の部分からカンマとピリオドを削除しないと、.,.,.,.,.,.,- を持つことができます:
^[0-9]+(([\.,][-])|([\.,][0-9]{2}))?$
------------に答える------------
正規表現を使用して、単純に「空白の不一致」の問題を解決します:
^[0-9.,]+(([.,][-])|([.,][0-9]{2}))?$
* は 0 以上を許可しますが、+ は 1 つ以上を許可するため、* は空白を許可しますが、+ は許可しません。代わりに、少なくとも 1 つの数字が必要です。
編集:
これを作るには、この正規表現を少しクリーンアップする必要があります
^[0-9]+(?:[.,-](?:[0-9]{2})?)?$
これは、",,," に一致するように解決されます
http://www.regextester.com/?fam=95185
編集 2: @Fuzzzzel は、これが "50,-" ケースと一致しないことを指摘しました。推定。以下は、私が提案した正規表現の最新版です:
^[0-9]+([.,-](-|([0-9]{2}))?)?$
タグ:
関連記事:
フローティングレイアウトを使用して別の場所にボタン/ラベルを配置するPython kivy
iis 7 - IIS 7 の 500.19、ローカルでログインできない