【问题标题】:Swift Regex to check if String is Amount format (2x, 3x,...)快速正则表达式检查字符串是否为金额格式(2x,3x,...)
【发布时间】:2021-01-15 19:56:28
【问题描述】:

我想检查给定的String 是否为 amount 格式。为了更好地理解,举几个例子:

应该返回true:

2x

31 倍

3x abcd

应该返回false:

2x3

3xabc

asdf3x

所以一般来说:它必须以数字(0-9)开头,可以是更多数字。在数字之后应该紧跟一个“x”/“X”,并且在“x”/“X”之后应该是结尾或空格。

我正在努力完成这项工作。这是我尝试过的:

func isAmountFormat() -> Bool {
    return self.matches("[0-9]+[X,x]")
}

谁能帮帮我?

【问题讨论】:

  • 您可以添加单词边界\b[0-9]+[Xx]\b
  • @Thefourthbird 给出invalid escape sequence in literal .
  • 那么也许\\b[0-9]+[Xx]\\b
  • 使用捕获组\\b([0-9]+)[Xx]\\bregex101.com/r/Y2DNT9/1
  • 使用"(?i)\\b[1-9][0-9]*x\\b"。您能否描述一下“金额格式”的含义以获得答案?

标签: ios swift regex string


【解决方案1】:

你可以使用

"(?i)\\b[1-9][0-9]*x\\b"

请参阅regex demo详情

  • (?i) - 不区分大小写的标志(以防您无法在当前的正则表达式匹配方法中传递 .caseInsensitive
  • \b - 单词边界
  • [1-9] - 非零数字
  • [0-9]* - 任何零个或多个数字
  • x - Xx
  • \b - 单词边界。

Swift snippet

let test = "3x abcd"
if test.range(of: "\\b[1-9][0-9]*x\\b", options: [.regularExpression, .caseInsensitive]) != nil {
    print("Matched")
} else {
   print("No match")
}

请注意,如果匹配应出现在字符串的开头,您可以使用.anchored 选项编译正则表达式对象,或者将第一个\\b 替换为^

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-09-26
    • 1970-01-01
    • 1970-01-01
    • 2012-08-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多