Javascript 使用正则表达式将0与100或0%与100%匹配
我正在尝试匹配以下内容,但我很难做到这一点 我希望允许0到100,或0%到100%。在我的文本字段中,我将%去掉,因此如果他们输入100,它不会在正则表达式中失败并跳过该条 因此,我需要一个正则表达式来允许0到100或0%到100%。101或101%无效 目前,我有以下几点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
(?:^((\\%)?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