2017-03-20 68 views
-2

我要寻找一个正则表达式满足如下:斯威夫特:正则表达式允许字母一个数字强制

  • 字母是允许用最小和最大限制。

  • 至少1个数字是强制性的。

+0

欢迎堆栈溢出的结束位置!您可以先[参观](http://stackoverflow.com/tour)并学习[如何提出一个好问题](http://stackoverflow.com/help/how-to-ask)并创建一个[最小,完整和可验证](http://stackoverflow.com/help/mcve)示例(最好是Playground代码段)。 – muescha

+0

如果您要提供一些示例(您要搜索的字符串以及要查找的模式类型),它可以帮助人们为您提供更准确的答案。现在的问题是,我会问“强制性号码必须处于特定位置”还是“允许多少个字母数字”?所以需要更多信息。 – Fahim

回答

0

您可以限制字母的数量在使用模式[a-zA-Z0-9]一个字符串,并使用{8,13}限制最小和最大事件。您也可以确保至少有一个数字做了数字(?=.*\\d)和非数字(?=.*\\D)积极前瞻的模式:

let regex = "^(?=.*\\d)(?=.*\\D)([a-zA-Z0-9]{8,13})$" 

正则表达式的细节

^断言位置在字符串

开始

(?=。* \ d)•匹配 数字的任何字符的正向前瞻

(?=。* \ d)•正先行任何字符匹配那一个 非数字

([A-ZA-Z0-9])•第一捕获匹配任何字母数字字符组

{8,13}的preciding令牌•范围发生(8〜13)

$断言在字符串

let string = "abcdefg1" 

if let range = string.range(of: regex, options: .regularExpression) { 
    print(string[range]) // abcdefg1\n" 
} 
相关问题