Regular expression for legs and inches - with decimals and fractions

I am creating an input mask used for the length of the elements. This input is converted to the “correct” format when blurred, but it must accept numbers, decimal numbers, spaces, single quotes, double quotes and / for fractions (without letters).

Everything is fine with me, but I am not a master of regular expressions and I feel that my template is too complicated. Thus, the following values ​​are valid:

5 6 (feet and inches separated by spaces)

5'6 "(feet and inches in the correct format)

5.2 6 (decimal feet separated by spaces)

5.2'6 "(decimal feet in the correct format)

5 6.1 (decimal inches separated by spaces)

5'6.1 "(decimal inches in the correct format)

5.2 6.1 (decimal feet and inches separated by spaces)

5.2'6.1 "( )

5 6 1/2 ( , )

5.2'6.1 1/2 "( )

78 "( )

78.4 "( )

, . -, , , ( , ). http://jsfiddle.net/t37m0txu/383/

// allow numbers
var p_num = "[0-9]";

// numbers are up to 9 characters (it needs a range, for some reason)
var p_range = "{0,9}";

// allow a single decimal
var p_dec = "([.]{0,1})";

// allow a single space (needs to happen only if not directly followed by a decimal)
var p_space = "([ ]{0,1})";

// numbers, possible single decimal and/or space
var p_base = p_num + p_range + p_dec + p_space;

// only allow a single/double quote after a number
var p_afternum = "?(?=" + p_num + ")";

// allow a single or double quote
var p_quote = "(\'(0?" + p_base + ")?\|\"$)";

// issues: 
// i do not need a range/cap on numbers
// after using decimal or space - only one number is allowed to follow (do not cap the range on numbers, only decimal/space)
// do not allow a space directly following a decimal
// do not allow a decimal directly following a single or double quote

var ex = "(" + p_base + ")" + p_afternum + p_quote + "(0?" + p_base + ")?\""
+4
1

REGEX .

ex = "[\\d]+(?:\\.[\\d]+|)(?:\\s\\d+\\/\\d+|)(?:\\s|\\'|\\\"|)[\\d]+(?:\\.[\\d]+|)(?:\\s\\d+\\/\d+|)(?:\\'|\\\"|)";
$('#feet').inputmask('Regex', { regex: ex });
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<script src="https://rawgit.com/RobinHerbots/jquery.inputmask/3.x/dist/jquery.inputmask.bundle.js"></script>
So the following values are allowed:<br /><br />

5 6 (feet and inches separated by spaces)<br />
5'6" (feet and inches in the correct format)<br />
5.2 6 (decimal feet separated by spaces)<br />
5.2'6" (decimal feet in the correct format)<br />
5 6.1 (decimal inches separated by spaces)<br />
5'6.1" (decimal inches in the correct format)<br />
5.2 6.1 (decimal feet and inches separated by spaces)<br />
5.2'6.1" (decimal feet and inches in the correct format)<br />
5 6 1/2 (any combination above followed by a space and fraction)<br />
5.2'6.1 1/2" (again with decimals)<br />
78" (only inches)<br />
78.4" (only inches with a decimal)<br />
    
<input id="feet" />

<br />
Hide result
+1

Source: https://habr.com/ru/post/1672195/


All Articles