Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/423.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 使用正则表达式将0与100或0%与100%匹配_Javascript_Python_Regex - Fatal编程技术网

Javascript 使用正则表达式将0与100或0%与100%匹配

Javascript 使用正则表达式将0与100或0%与100%匹配,javascript,python,regex,Javascript,Python,Regex,我正在尝试匹配以下内容,但我很难做到这一点 我希望允许0到100,或0%到100%。在我的文本字段中,我将%去掉,因此如果他们输入100,它不会在正则表达式中失败并跳过该条 因此,我需要一个正则表达式来允许0到100或0%到100%。101或101%无效 目前,我有以下几点 (?:^((\\%)?100(\\%)?$)|(?:^(\\%)?[0-9]{1,2}(\\%)?)((\\.|,)?[0-9]+)?$) 但这允许101%,但不允许101% 请帮忙!任何帮助都将不胜感激。您正试图使用re

我正在尝试匹配以下内容,但我很难做到这一点

我希望允许0到100,或0%到100%。在我的文本字段中,我将%去掉,因此如果他们输入100,它不会在正则表达式中失败并跳过该条

因此,我需要一个正则表达式来允许0到100或0%到100%。101或101%无效

目前,我有以下几点

(?:^((\\%)?100(\\%)?$)|(?:^(\\%)?[0-9]{1,2}(\\%)?)((\\.|,)?[0-9]+)?$)
但这允许101%,但不允许101%


请帮忙!任何帮助都将不胜感激。

您正试图使用regex做一些regex不应该做的事情。您有javascript和python标记;您应该使用regex来确保输入是一个数字,然后使用javascript或python来确定该数字是太大还是太小。这样做会容易得多。

本着@eykanal回答的精神,这里有一个正则表达式:

\d{1,3}%?在Python中使用

我的测试文本是:

101
100
100%
101%
0%
0
50%

这将得到一个数字,然后您可以对其进行解析,并确定它是否在您可以接受的范围内。

在javascript parseInt上使用

parseInt执行以下操作:

"100" -> 100
"10k" -> 10
"100%" -> 100
在此之后,检查您的号码是否小于101

例如

function parsePerc(value) {
   return parseInt(value) < 101;
}
/^100 |[0-9]{1,2}%$/

“100”或由一位或两位数字组成的任何数字 后面可能跟一个百分号。 在此处测试:

哦,是的,第一次捕获包含了数字

有些人在面对 问题,想想“我知道,我会用 正则表达式。”现在他们有了 两个问题 一九九七年


严肃地说,您正在尝试做正则表达式不打算做的事情,这就是执行逻辑。你要问的是,这个字符串是否包含一个数字,这很好,如果包含,它是否>=0&&=0和这个问题被标记为python,所以我将用python回答:

def is0to100(num):
    try:
        return 0 <= int(num.rstrip('%')) <= 100
    except ValueError:
        return False

如果传入的值减去可能的尾部“%”是介于0和100之间的有效整数,则返回True。我没有对它进行基准测试,但我认为它比regexp快得多。

首先,我同意eykanal和Jarrod Roberson的观点

但是,正则表达式非常简单,我不太同意,我认为它是更好的解决方案:

'(\d\d?|100)(?!\d)\Z'  and use of match()
我认为在第一个位置上演示\d\d?对于检测小于100的数字,并且在第二位置仅检测数字100,具有更自然的逻辑

还有\d\d?比\d{1,2}更短,理解速度更快

编辑

更好:

'(\d\d?|100)\D?\Z'
但是这些是用来检测的。由于目的是验证,这一点就足够了:

'(\d\d?|100)\Z'
以0比100配对

^100$|^[123456789][0-9]$|^[0-9]$
匹配0%到100%

^100[%]$|^[123456789][0-9][%]$|^[0-9][%]$

这正好匹配0或100,不是吗?@Martijn:我认为你的第一条评论可以删除,因为它对答案中包含的内容进行了评论,因此你的第二条评论也可以删除,因为你可能从那时起就睡着了:然后我也可以删除这条评论。还有,请看。是的,不要将正则表达式作为一个工具来处理所有事情,即使你可以,它几乎肯定是完全不可读的,即使它相当简单,并且可能包含一些奇怪的角落案例。有些人在遇到问题时,会认为“我知道,我会使用正则表达式。”现在他们有两个问题1997