我有這種表情的唯一有效數...換號只允許1逗號和小數點正則表達式
^[0-9,-\.]+$
這工作得很好,但我需要確保最大的1 ,
和1 .
能被輸入?這需要迎合不同的文化,所以對我來說無關緊要的是,
和.
。
任何人都可以幫忙嗎?
我有這種表情的唯一有效數...換號只允許1逗號和小數點正則表達式
^[0-9,-\.]+$
這工作得很好,但我需要確保最大的1 ,
和1 .
能被輸入?這需要迎合不同的文化,所以對我來說無關緊要的是,
和.
。
任何人都可以幫忙嗎?
如果您正則表達式的味道支持向前看符號可以使用:
^(?=[^,],[^,]$)(?=[^.]\.[^.]$)[\d,.-]+$
如果沒有,那麼你可以做這樣的事情:
^(?:[\d-]*,?[\d-]*\.?[\d-]*|[\d-]*\.[\d-]*,[\d-]*)$
但我覺得這是比較難看。
請注意,我改變了你的角色等級。 [0-9]
可以縮短爲\d
(注意,根據您的正則表達式,這可能與其他Unicode數字相比,不僅僅是0-9
),.
不需要在字符類內部轉義,並且-
屬於字符類的開始或結束,否則他們需要逃脫。有趣的是,在你的情況下,它甚至沒有什麼區別,因爲,-.
創建了一個從,
到.
(按ASCII順序)的字符範圍。然而,該範圍內的所有字符順帶地是,
,-
和.
。幸運的你;)
然而,這兩個答案真的只是做你明確要求。你的模式將仍然匹配--.--34,---1--2
和類似的東西。如果你真的想匹配與文化無關的小數點的有效數字,你應該使用這個代替:
^-?\d*([.,]\d+)?$
,如果你想匹配.
小數點的有效數字,最多一個,
千分離器(反之亦然),這:
^-?\d{0,3}(?:(?:,\d{3})?(?:\.\d+)?|(?:\.\d{3})?(?:\,\d+)?)$
我不認爲有一個更短的版本,真的。不要擔心所有的?:
。他們只是使子模式不捕獲。既然你不需要這個,那通常會顯着提高性能。
這是我可能會用到的。
/^-?\d{0,2}((\.?\d{3})*(,\d+)?|(,?\d{3})*(\.\d+)?)$/
/*
^ beginning of string
-? 0 or 1 minus sign
\d{0,2} 0-2 numbers
(
(\.?\d{3})* 0 or more (3-digit numbers, alternatively preceded by a dot)
(,\d+)? 0 or 1 (comma and at least 1 number)
| or
(,?\d{3})* 0 or more (3-digit numbers, alternatively preceded by a comma)
(\.\d+)? 0 or 1 (dot and at least 1 number)
)
$ end of string
*/
編輯:你可以,如果你想在浮動部分限制在2個位數變成
/^-?\d{0,2}((\.?\d{3})*(,\d{1,2})?|(,?\d{3})*(\.\d{1,2})?)$/
^^^ ^^^
這一點。
您可以簡單地使用這個regex..it的相當簡單明瞭..
^(\d*|\d*\,\d*|\d*\.\d*|\d*\.\d*\,\d*|\d*\,\d*\.\d*)$
我會很感激的例子。浮點數是你想要匹配的嗎? –
你的正則表達式認爲'。---,'是一個有效的數字。我不。 ;)另外,不要忘記正確的逗號類型是依賴於文化的。 – Lucero
我明白你爲什麼要允許不超過一個小數點分隔符,但爲什麼只允許一個千位分隔符? 「1,000,000.00」不是有效的號碼嗎?或'1.000.000,00',取決於你的區域? (甚至'1'000'000,00'和其他許多變種可以在現實生活中找到...) –