ฉันจะรวมตัวเลขทศนิยมที่เป็นลบในนิพจน์ทั่วไปนี้ได้อย่างไร


90

ฉันจะจับคู่ตัวเลขติดลบด้วยนิพจน์ทั่วไปนี้ได้อย่างไร regex นี้ทำงานได้ดีกับค่าบวก แต่ฉันต้องการให้มันอนุญาตค่าลบเช่น -10, -125.5 เป็นต้น

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

ขอบคุณ


1
@DanPuzey คุณไม่เห็น Regex ที่เขาโพสต์หรือไม่?
Nolonar


ฉันพยายามเพิ่ม [-] ในตอนเริ่มต้น แต่ไม่ได้ผล ฉันยังลองผสมผสานการเปลี่ยนแปลงเล็ก ๆ น้อย ๆ ด้วย
user1786107

ลองดูสิ ^ -? \ d + (\. \ d +)? $
Civa

@DanPuzey คำพูดของคุณเพิ่มอะไรในการสนทนาและไม่สุภาพ
Wassadamo

คำตอบ:


176

คุณควรเพิ่มยัติภังค์ที่เป็นทางเลือกที่จุดเริ่มต้นโดยการเพิ่ม-?( ?เป็นตัวบ่งชี้ที่หมายถึงเหตุการณ์หนึ่งหรือศูนย์ ):

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

ฉันตรวจสอบใน Rubular ด้วยค่าเหล่านี้:

10.00
-10.00

และทั้งคู่ตรงตามที่คาดไว้


2
คุณควรหลีกหนีจุดนั่นคือ^-?[0-9]\d*(\.\d+)?$
Alex Shesterov

14
หากมีความจำเป็นที่จะต้องจับตัวเลขที่เป็นไปได้อย่างชัดเจน (+10.00 ใช้ในบางแอปพลิเคชัน) คุณสามารถใช้ได้^[-+]?[0-9]\d*(\.\d+)?$
Cemafor

129

ตัวอย่างนิพจน์ทั่วไปบางส่วน:

จำนวนเต็มบวก :

^\d+$

จำนวนเต็มลบ :

^-\d+$

จำนวนเต็ม :

^-?\d+$

จำนวนบวก :

^\d*\.?\d+$

จำนวนลบ :

^-\d*\.?\d+$

จำนวนบวกหรือจำนวนลบ :

^-?\d*\.{0,1}\d+$

เบอร์โทร :

^\+?[\d\s]{3,}$

โทรศัพท์ที่มีรหัส :

^\+?[\d\s]+\(?[\d\s]{10,}$

ปี พ.ศ. 2443-2542 :

^(19|20)[\d]{2,2}$

วันที่ (dd mm yyyy, d / m / yyyy ฯลฯ ):

^([1-9]|0[1-9]|[12][0-9]|3[01])\D([1-9]|0[1-9]|1[012])\D(19[0-9][0-9]|20[0-9][0-9])$

IP v4 :

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

11

[0-9]ผมไม่ทราบว่าทำไมคุณต้องแรก

ลอง:

^-?\d*(\.\d+)?$

อัปเดต

หากคุณต้องการให้แน่ใจว่าคุณมีตัวเลขอยู่ในตำแหน่งนั้นให้ใช้

^-?\d+(\.\d+)?$

1
อาจเป็นเพียงการรับประกันตัวเลขในตำแหน่งเดียว^-?\d+(\.\d+)?$ควรใช้งานได้หากเป็นเช่นนั้น
Cemafor

คำตอบที่เหมาะสมที่สุด ฉันไม่คิดว่า [0-9] จำเป็นดังที่แสดงในคำตอบที่ยอมรับ
UzumakiL

3

อัปเดต (13/08/2014):นี่คือรหัสที่ดีที่สุดสำหรับตัวเลขบวกและลบ =)

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

ฉันลองใช้ตัวเลขนี้แล้วและใช้งานได้ดี:

-1234454.3435
-98.99
-12.9
-12.34
-10.001
-3
-0.001
-000
-0.00
0
0.00
00000001.1
0.01
1201.0000001
1234454.3435
7638.98701

เปลี่ยน-*ไปเพราะมันตรงกับ-? -------------
โตโต้

ฉันทำการเปลี่ยนแปลงเพิ่มเติมบางอย่างและตอนนี้ใช้งานได้ดี โปรดตรวจสอบว่า =)
Pacho Zuñiga



1

ฉันมีการทดลองบางอย่างเกี่ยวกับ regex ใน django url ซึ่งต้องใช้จากจำนวนลบถึงบวก

^(?P<pid>(\-\d+|\d+))$

เรามาเน้นที่(\-\d+|\d+)ส่วนนี้และไม่สนใจคนอื่น ๆ อัฒภาคนี้|หมายถึงหรือใน regex จากนั้นค่าลบจะจับคู่กับ\-\d+ส่วนนี้และค่าบวกในส่วนนี้\d+



1

หากคุณมีสิ่งนี้val="-12XXX.0abc23"และต้องการแยกเฉพาะเลขฐานสิบในกรณีนี้ regex ( ^-?[0-9]\d*(\.\d+)?$) นี้จะไม่ช่วยให้คุณบรรลุ
นี่คือรหัสที่เหมาะสมกับ regex การตรวจจับที่ถูกต้อง:

var val="-12XXX.0abc23";
val = val.replace(/^\.|[^-?\d\.]|\.(?=.*\.)|^0+(?=\d)/g, '');
console.log(val);


0

เพียงเพิ่มโทเค็น 0 หรือ 1:

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

อังเดรเอาชนะฉันไปเขาพูดถูกเช่นกันไม่จำเป็นต้องมีโทเค็น [0-9]
BanksySan



0

นิพจน์ทั่วไปสำหรับตัวเลขจุดทศนิยมทางเลือกลบเพิ่มเติม:

^-?(\d*\.)?\d+$;

ทำงานสำหรับจำนวนเต็มลบทศนิยมลบด้วยทศนิยม


โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.