การแสดงออกปกติสำหรับทศนิยมที่มีความแม่นยำ 2 คืออะไร?
ตัวอย่างที่ถูกต้อง :
123.12
2
56754
92929292929292.12
0.21
3.1
ตัวอย่างไม่ถูกต้อง:
12.1232
2.23332
e666.76
จุดทศนิยมอาจเป็นทางเลือกและอาจรวมถึงจำนวนเต็ม
การแสดงออกปกติสำหรับทศนิยมที่มีความแม่นยำ 2 คืออะไร?
ตัวอย่างที่ถูกต้อง :
123.12
2
56754
92929292929292.12
0.21
3.1
ตัวอย่างไม่ถูกต้อง:
12.1232
2.23332
e666.76
จุดทศนิยมอาจเป็นทางเลือกและอาจรวมถึงจำนวนเต็ม
คำตอบ:
โทเค็น regex ที่ถูกต้องจะแตกต่างกันตามการใช้งาน รูปแบบทั่วไปคือ:
[0-9]+(\.[0-9][0-9]?)?
กะทัดรัดยิ่งขึ้น:
\d+(\.\d{1,2})?
ทั้งคู่สันนิษฐานว่าทั้งคู่มีตัวเลขอย่างน้อยหนึ่งหลักก่อนและหนึ่งตำแหน่งหลังจุดทศนิยม
ในการกำหนดให้สตริงทั้งหมดเป็นจำนวนของฟอร์มนี้ให้ตัดการแสดงออกในแท็กเริ่มต้นและแท็กสิ้นสุดเช่น (ในรูปแบบของ Perl):
^\d+(\.\d{1,2})?$
หากต้องการจับคู่ตัวเลขที่ไม่มีตัวเลขนำหน้าก่อนจุดทศนิยม ( .12
) และตัวเลขทั้งหมดที่มีระยะเวลาต่อท้าย ( 12.
) โดยไม่รวมอินพุตของช่วงเวลาเดียว ( .
) ให้ลองดังต่อไปนี้:
^(\d+(\.\d{0,2})?|\.?\d{1,2})$
ห่อส่วนที่เป็นเศษส่วน()?
เพื่อให้เป็นทางเลือก โปรดทราบว่าสิ่งนี้จะยกเว้นแบบฟอร์มต่าง ๆ เช่นการ12.
รวมที่จะเป็นมากกว่า^\d+\\.?\d{0,2}$
นั้น
ใช้^\d{1,6}(\.\d{1,2})?$
เพื่อหยุดการทำซ้ำและให้ข้อ จำกัด กับส่วนทั้งหมดของค่าทศนิยม
-?
-?\d+(\.\d{1,2})?
ฉันไม่ได้รวมเชิงลบหรือเริ่มต้นด้วยจุดทศนิยมเนื่องจากที่ไม่ได้อยู่ในคำถามของ OP แม้ว่าพวกเขาจะถูกต้องสำหรับรูปแบบตัวเลขทั่วไปมากขึ้น กระทู้ความคิดเห็นที่นี่มีวิธีจัดการ ".21" สองสามวิธี
^[0-9]+(\.[0-9]{1,2})?$
และเนื่องจากการแสดงออกปกติน่ากลัวในการอ่านเข้าใจน้อยกว่านี่คือสิ่งที่เทียบเท่า verbose:
^ # Start of string
[0-9]+ # Require one or more numbers
( # Begin optional group
\. # Point must be escaped or it is treated as "any character"
[0-9]{1,2} # One or two numbers
)? # End group--signify that it's optional with "?"
$ # End of string
คุณสามารถแทนที่[0-9]
ด้วย\d
ในการใช้งานการแสดงออกปกติส่วนใหญ่ (รวมถึงPCREที่พบมากที่สุด) ฉันทิ้งไว้อย่าง[0-9]
ที่ฉันคิดว่ามันอ่านง่ายกว่า
นอกจากนี้ต่อไปนี้เป็นสคริปต์ Python แบบง่าย ๆ ที่ฉันใช้ตรวจสอบ:
import re
deci_num_checker = re.compile(r"""^[0-9]+(\.[0-9]{1,2})?$""")
valid = ["123.12", "2", "56754", "92929292929292.12", "0.21", "3.1"]
invalid = ["12.1232", "2.23332", "e666.76"]
assert len([deci_num_checker.match(x) != None for x in valid]) == len(valid)
assert [deci_num_checker.match(x) == None for x in invalid].count(False) == 0
+
paren หลังปิดครั้งแรกออกไป^([0-9]{0,3})(\.[0-9]{1,2})?$
\\.
แทนที่จะเป็น\.
เพราะ.
จะดูเหมือนว่าใช้งานได้ แต่ตรงกับอักขระใด ๆ (ไม่ใช่แค่ตำแหน่งทศนิยม) ตัวอย่างเช่นทั้งสอง1z23
และ1.23
อาจถูกพิจารณาว่าถูกต้องหากคุณไม่รอด
ในการรวมเครื่องหมายลบและไม่อนุญาตให้ใช้หมายเลขเช่น015
(ซึ่งสามารถเข้าใจผิดว่าเป็นตัวเลขฐานแปด) ให้เขียน:
-?(0|([1-9]\d*))(\.\d+)?
สำหรับตัวเลขที่ไม่มีตัวคั่นหลักพันฉันชอบ regex ขนาดกะทัดรัดที่เรียบง่ายนี้:
\d+(\.\d{2})?|\.\d{2}
หรือไม่จำกัดความแม่นยำที่ 2:
\d+(\.\d*)?|\.\d+
หลังการแข่งขัน
1
100
100
100.74
100.7
0.7
.7
.72
และไม่ตรงกับสตริงว่าง (เช่น \ d *.? \ d * จะ)
ฉันใช้อันนี้ถึงทศนิยมสองตำแหน่ง:
(^(\+|\-)(0|([1-9][0-9]*))(\.[0-9]{1,2})?$)|(^(0{0,1}|([1-9][0-9]*))(\.[0-9]{1,2})?$)
ผ่าน:
.25
0.25
10.25
+0.25
ไม่ผ่าน:
-.25
01.25
1.
1.256
^[0-9]+(\.([0-9]{1,2})?)?$
จะทำให้สิ่งต่าง ๆ เป็นที่12.
ยอมรับ นี่ไม่ใช่สิ่งที่ยอมรับกันโดยทั่วไป แต่ถ้าในกรณีที่คุณต้อง“ ยืดหยุ่น” นั่นเป็นวิธีหนึ่งที่จะไป และแน่นอน[0-9]
สามารถถูกแทนที่ด้วย\d
แต่ฉันคิดว่ามันอ่านได้มากกว่านี้
ลองสิ่งนี้
(\\+|-)?([0-9]+(\\.[0-9]+))
มันจะช่วยให้สัญญาณบวกและลบได้เช่นกัน
คำตอบที่สำคัญคือผิดเพราะมันเป็น5.
หรือ5,
อินพุต
รหัสนี้จัดการกับมัน (แต่ในตัวอย่างจำนวนลบของฉันเป็นสิ่งต้องห้าม):
/^[0-9]+([.,][0-9]{1,2})?$/;
ผลลัพธ์เป็นเบลล์:
true => "0" / true => "0.00" / true => "0.0" / true => "0,00" / true => "0,0" / true => "1,2" true => "1.1" / true => "1" / true => "100" true => "100.00" / true => "100.0" / true => "1.11" / true => "1,11" / false => "-5" / false => "-0.00" / true => "101" / false => "0.00.0" / true => "0.000" / true => "000.25" / false => ".25" / true => "100.01" / true => "100.2" / true => "00" / false => "5. " / false => "6," / true => "82" / true => "81,3" / true => "
preg_match("/^-?\d+[\.]?\d\d$/", $sum)
โดยทั่วไปคือตำแหน่งทศนิยมที่ไม่ จำกัด :
^-?(([1-9]\d*)|0)(.0*[1-9](0*[1-9])*)?$
.
คุณจะไม่จำเป็นต้องใช้e
ในการe666.76
เข้าสู่บัญชี?
กับ
(e|0-9)\d*\d.\d{1,2)
เพิ่มคำตอบของฉันด้วยบางคนอาจพบว่ามีประโยชน์หรืออาจถูกต้องเช่นกัน
function getInteger(int){
var regx = /^[-+]?[\d.]+$/g;
return regx.test(int);
}
alert(getInteger('-11.11'));
สิ่งนี้ใช้ได้กับฉัน:
(-?[0-9]+(\.[0-9]+)?)
กลุ่ม 1คือหมายเลขลอยของคุณและกลุ่ม 2เป็นเพียงเศษส่วนเท่านั้น
ฉันลองกับโครงการของฉัน ซึ่งช่วยให้ตัวเลขที่มี+ | -
สัญญาณเช่นกัน
/^(\+|-)?[0-9]{0,}((\.){1}[0-9]{1,}){0,1}$/
Chrome 56 ไม่ยอมรับรูปแบบประเภทนี้ (Chrome 56 กำลังเพิ่ม 11.11. เพิ่มเติม) พร้อมหมายเลขประเภทใช้ประเภทเป็นข้อความที่กำลังดำเนินการ
ซึ่งจะอนุญาตให้มีทศนิยมด้วยการยกกำลังและไม่เกิน 2 หลัก
^[+-]?\d+(\.\d{2}([eE](-[1-9]([0-9]*)?|[+]?\d+))?)?$
1.2e-10
([0-9]+)?
\d*
ถูกเขียนดีกว่า 10e3
ตอนนี้มันไม่ตรงกับ และ OP ต้องการจับคู่ไม่เกิน 2 หลัก
function DecimalNumberValidation() {
var amounttext = ;
if (!(/^[-+]?\d*\.?\d*$/.test(document.getElementById('txtRemittanceNumber').value))){
alert('Please enter only numbers into amount textbox.')
}
else
{
alert('Right Number');
}
}
ฟังก์ชั่นจะตรวจสอบความถูกต้องของตัวเลขสภาพอากาศเลขทศนิยมใด ๆ ที่มีตำแหน่งทศนิยมหรือไม่มันจะพูดว่า "หมายเลขที่ถูกต้อง" อื่น ๆ ที่ชาญฉลาด "กรุณาใส่ตัวเลขลงในช่องข้อความจำนวนเท่านั้น" ข้อความแจ้งเตือนจะเกิดขึ้น
ขอบคุณ ... :)