英尺和英寸的正则表达式 - 带小数和分数

Posted

技术标签:

【中文标题】英尺和英寸的正则表达式 - 带小数和分数【英文标题】:Regex for feet and inches - with decimals and fractions 【发布时间】:2017-08-03 22:56:51 【问题描述】:

我正在创建一个用于项目长度的输入掩码。此输入将在模糊时转换为“正确”格式,但它应该接受数字、小数、空格、单引号、双引号和 / 表示分数(无字母)。

我有一个好的开始,但我不是正则表达式大师,我觉得我的模式太复杂了。因此允许以下值:

5 6(英尺和英寸用空格隔开)

5'6"(正确格式的英尺和英寸)

5.2 6(以空格分隔的小数英尺)

5.2'6"(正确格式的小数英尺)

5 6.1(以空格分隔的十进制英寸)

5'6.1"(正确格式的十进制英寸)

5.2 6.1(以空格分隔的十进制英尺和英寸)

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 + ")?\""

【问题讨论】:

也许 regex101.com/r/zlXQnA/2(javascript 不喜欢命名组)组 1 是英尺,2 是英寸。 【参考方案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 />

【讨论】:

当我将某些内容粘贴到我的 js 中时,它并没有被转义。我需要添加什么来修复它? ^[\d]+(?:\.[\d]+|)(?:\s\d+\/\d+|)(?:\s|\'|\" |)[\d]+(?:\.[\d]+|)(?:\s\d+\/\d+|)(?:\'|\"|)$ 我添加了 ^ 和 $ 以便它必须匹配完整的字符串。 是的,添加 ^$ 哦,我们只需要转义特殊字符:jsfiddle.net/nfnneil/t37m0txu/395

以上是关于英尺和英寸的正则表达式 - 带小数和分数的主要内容,如果未能解决你的问题,请参考以下文章

正则表达式 可以输入负数、正数、小数(小数保留一位)。

正则表达式只接受带小数点和小数点的数字输入

正则表达式

求大神帮忙写一个只允许是百分数的js正则表达式(从0%至100%,中间数字允许两位小数)。

正则表达式验证文本框只能输入数字和小数点

正则表达式验证文本框只能输入数字和小数点