亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

正則表達式添加 10 位數字的限制,十進制值沒有限制

正則表達式添加 10 位數字的限制,十進制值沒有限制

PHP
慕蓋茨4494581 2023-04-23 17:54:40
我想在需要 10 位數字限制但小數點后的值沒有限制的地方應用驗證。像這樣 1000000000.2121 小數點前的值應該小于 10 位。我正在嘗試這個正則表達式 ^(10|\d)(\.\d{1,2})?$但是通過這個,我只添加了兩個限制的十進制數字。我怎樣才能做到這一點?
查看完整描述

4 回答

?
鴻蒙傳說

TA貢獻1865條經驗 獲得超7個贊

小數點前的值應小于10位

此模式允許 0 到 9 位數字,然后可選地允許小數點后跟無限位數字。

如果您的要求是小數點前至少有一位數字,則更{0-9}改為{1,9}.

如果您的要求是小數點前有零到十位數字,則更{0,9}改為{0,10}.

代碼:

$tests = [

? ? '12345678901',

? ? '1234567890',

? ? '123456789',

? ? '1234567890.1',

? ? '1234567.8901',

? ? '1234.5678901',

? ? '1.2345678901',

? ? '.12345678901',

];


foreach ($tests as $test) {

? ? var_export([$test, (bool)preg_match('~^\d{0,9}(?:\.\d+)?$~', $test)]);

? ? echo "\n";

}

輸出:


array (

? 0 => '12345678901',

? 1 => false,

)

array (

? 0 => '1234567890',

? 1 => false,

)

array (

? 0 => '123456789',

? 1 => true,

)

array (

? 0 => '1234567890.1',

? 1 => false,

)

array (

? 0 => '1234567.8901',

? 1 => true,

)

array (

? 0 => '1234.5678901',

? 1 => true,

)

array (

? 0 => '1.2345678901',

? 1 => true,

)

array (

? 0 => '.12345678901',

? 1 => true,

)


查看完整回答
反對 回復 2023-04-23
?
德瑪西亞99

TA貢獻1770條經驗 獲得超3個贊

如果總數不應超過 10,并且數字不能以逗號開頭,則可以斷言不是 11 位,并保留匹配\d+1 位或更多位的數字。

^(?!(?:[^\d\r\n]*\d){11})\d+(?:\.\d+)?$

解釋

  • ^字符串的開始

  • (?!Negative lookahead,斷言右邊的不是

    • (?:[^\d\r\n]*\d){11}匹配任何字符的 11 次,除了換行符后跟一個數字

  • )關閉前瞻。

  • \d+匹配 1 個以上的數字

  • (?:\.\d+)?可選擇匹配一個點和 1+ 個數字

  • $字符串結束

查看完整回答
反對 回復 2023-04-23
?
素胚勾勒不出你

TA貢獻1827條經驗 獲得超9個贊

你在陳述兩件事(并沒有展示很多可以使用的例子):

  • "小數點前的值應小于10位"

  • “我需要 10 位數字的限制,但小數點后的值沒有限制”

哪一個?我采用了第一個假設,即不能超過 9 位數字,但必須至少有一個。同樣對于數字有效性,我認為只以單個零或根本不從零開始是有意義的:

^(?:0|[1-9]\d{0,8})(?:\.\d+)?$

  • ^- 開始字符串錨。

  • (?:- 第一個非捕獲組。

    • 0|[1-9]\d{0,8}- 單個零1-9 之間的單個數字,后跟零到 8 個數字,以保持在 10 位以下。

  • )- 關閉第一個非捕獲組。

  • (?:- 第二非捕獲組。

    • \.\d+- 一個文字點后跟一個或多個數字。

  • )- 關閉第二個非捕獲組。

  • ?- 使第二個非捕獲組可選。

  • $- 結束弦錨。

http://img1.sycdn.imooc.com/6445008e000188c103210091.jpg

注意:如果您允許數字以點開頭,這可以簡化。



查看完整回答
反對 回復 2023-04-23
?
慕娘9325324

TA貢獻1783條經驗 獲得超4個贊

以下模式適用于 <= 10 位數字到點之前的值和點之后的任意數量的數字。

$b = preg_match("!^\d{1,10}(\.\d*)?$!",109.9);


查看完整回答
反對 回復 2023-04-23
  • 4 回答
  • 0 關注
  • 380 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號