使用正则表达式验证浮点数

时间:2017-08-25 10:00:01

标签: python regex

我是Regexs的新手。我想检查一下我的电话号码是否有效。

如果它包含a-z之类的任何内容或+ - 或 - +之类的符号,则无效。例如: -

425.09z无效

+ - 425.09无效

425.09是有效的

我正在使用下面的代码并且混淆了如何在此处设置 OR 条件以检查文本中是否包含+ - 或 - +等符号,因此它将无效。我刚刚在if语句中添加了一个条件[a-z]并且它工作正常

import re
text="+-432.18"
if re.search(r"[a-z]", text):
    print("invalid")
else:
    print("valid")

输出: 应该是无效的

编辑: +425或-425将是有效数字

3 个答案:

答案 0 :(得分:1)

^[0-9]+\.?[0-9]+$

<强>详情

  • ^断言字符串的开头

  • [0-9]+仅查找数字,一个或多个

  • \.?十进制,查找0或其中一个

  • [0-9]+仅查找数字,一个或多个

  • $字符串结尾

See it here

答案 1 :(得分:0)

您可以使用|来匹配不同的内容。

if re.search(r"[a-z]|\+-|-\+", text):

您需要转义+,因为它在正则表达式中具有特殊含义。

但通常对于输入验证,最好定义好的输入是什么样的,并匹配它,而不是尝试列出所有不允许的内容。例如,这会将123$456视为有效,因为您不会检查$

答案 2 :(得分:0)

我知道你想使用正则表达式,但我认为这不是正确的工具。 我会选择in支票:

if "+-" in text or "-+" in text:
    print("Invalid input")

当然,您可以使用正则表达式执行相同操作,可能更具可扩展性:

>>> regex = re.compile(r"(\+-|-\+)")
>>> regex.search("+-25.2") is None
False
>>> regex.search("+25.2") is None
True

现在,如果您想将该测试与第一个测试(re.search(r"[a-z]", text))相结合,您应该连续应用这两个测试:

regex1 = re.compile(r"[a-z]")
regex2 = re.compile(r"(\+-|-\+)")
if regex1.search(text) or regex2.search(text):
    print("Invalid input")