我试图创建一个正则表达式。规则是:
1)只有字母(上下),数字,句号(。)和下划线(_)
2)必须以字母或数字开头和结尾(即没有句号/下划线)
3)连续不能有多个标点符号(无..或._或_。或__或.._等。)
4)必须至少包含2个字母(上面或下面或两者都有,并不重要)
5)不少于3个字符,不超过25个字符
到目前为止,我所拥有的是:
^((?!.*[\._]{2})[A-Za-z0-9\._]{3,25})$
这是近在咫尺。我已经获得了规则1,3和5,但无法弄清楚2和4。
我以为
(([A-Za-z0-9]?)([A-Za-z0-9\._]+)([A-Za-z0-9]?)){3,25}
会得到规则2,但它只会破坏它。
我已经在这上工作了几个小时,但我找不到或者想出的任何解决方案都不是我想要的。
对您提供的正则表达式声明的解释将非常感激,但并非完全必要。
编辑1
根据noob的建议:
^((?!.*[\._]{2})(([\w\d\.]+)){3,25})$
编辑2
有效:
1rockit.man
q3w
e4.45r.d.2
sp_am
(以及3到25个字符之间的任何其他内容,不带引号或重复标点符号)
无效:
.ret.
123
12a
ret..wer
super_.duper
_petrat
petrat_
答案 0 :(得分:7)
根据您的条件,我提出了以下正则表达式。它只是对你当前正则表达式的修改。
正则表达式: ^(?=.*[A-Za-z].*[A-Za-z])([A-Za-z0-9]((?!.*[\._]{2})([\w\d\.]{1,23}))[A-Za-z0-9])$
说明:
第一部分(?=.*[A-Za-z].*[A-Za-z])
检查整个字符串是否有 two
字符,用任何分隔(这几乎就是这里的情况) )。
我在字符串的开头和结尾添加了检查,该检查应该是字母或数字。
除此之外,长度也会因为第一个和最后一个字符的计算而有所不同,其余长度仅为 23个字符。
的 Regex101 Demo 强>
答案 1 :(得分:4)
根据规则构建正则表达式(按顺序排列):
//i
[\w.]*
^[\w.]{3,25}$
(?!^[\W_]|[W_]$)
\W
含义not \w
)(?![\W_]{2})
(?:(?!...)[\w.]){3,25}
(?:)
代替()
,因为我们不需要保存群组)(?:.*[a-z]){2}
假设i
标志(?=(?:...))
最终的正则表达式字面值:
/^(?=(?:.*[a-z]){2})(?:(?!^[\W_]|[\W_]{2}|[\W_]$)[\w.]){3,25}$/i
https://regex101.com/r/yK1cB3/5#javascript
<小时/> FTR:在支持
x
标志的语言中(忽略正则表达式中的空格),可以使其更具可读性(参见workaround for javascript):
^
(?=
(?:.*[a-z]){2}
)
(?:
(?!^[\W_]|[\W_]{2}|[\W_]$)
[\w.]
){3,25}
$
答案 2 :(得分:1)
您可以尝试:
^(?=.*[a-zA-Z].*[a-zA-Z].*)[a-zA-Z0-9](?!.*[._]{2,}|.*[._]$)[._a-zA-Z0-9]{2,24}$
或者,如果您更喜欢使用 \ w \ d \ s 这样的字符类,可以使用:
^(?=.*[a-zA-Z].*[a-zA-Z].*)\w(?!.*[._]{2,}|.*[._]$)(\w|[._]){2,24}$
答案 3 :(得分:1)
羚牛部分在你的谜语挑战。这是我的版本。也会有不错的表现:)
/^(?=(?:.*?[a-z]){2})[a-z\d](?!.*?[._]{2})[\w.]{1,23}[a-z\d]$/i
i
flag用于无效匹配,其中[a-z]
与alpha [a-zA-Z]
等效。
对于字词\w
,[A-Za-z0-9_]
为short,因此[\w.]
将匹配允许的字符。
(?:
打开non capturing group主要用于重复或替换(如果不需要群组)
(?=
(?!
lookarounds是在某个位置触发的零长度断言。
[a-z\d]
开始时需要一个alnum ^
,在$
结束时需要一个alnum [\w.]{1,23}
(?!.*?[._]{2})
(?=(?:.*?[a-z]){2})
没有通过否定前瞻检查连续标点符号。import UIKit
import Alamofire
import SwiftyJSON
class MenuView: UIViewController, KYDrawerControllerDelegate,UITableViewDelegate, UITableViewDataSource {
@IBOutlet weak var menuTableview: UITableView!
struct Objects {
var sectionName : String!
var sectionObjects : [String]!
}
var objectsArray = [Objects]()
var categoriesArr = [String]()
override func viewDidLoad() {
super.viewDidLoad()
let bar:UINavigationBar! = self.navigationController?.navigationBar
//self.title = "Home Screen"
bar.setBackgroundImage(UIImage(), forBarMetrics: UIBarMetrics.Default)
bar.shadowImage = UIImage()
bar.alpha = 0.0
objectsArray = [
Objects(sectionName: "", sectionObjects: ["Home"]),
Objects(sectionName: "Categories", sectionObjects: categoriesArr),
Objects(sectionName: "My Account", sectionObjects: ["My WishList", "My Profile", "My Addresses", "My Order", "Log out"]),
Objects(sectionName: "Support", sectionObjects: ["About Us", "Delivery Information", "Privacy Policy", "Terms & Conditions", "Contact Us", "Return Policy"])]
}
override func viewWillAppear(animated: Bool) {
super.viewWillAppear(true)
callAPI()
}
//MARK: UITabView DataSources
func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCellWithIdentifier("Cell") as UITableViewCell!
cell.textLabel?.text = objectsArray[indexPath.section].sectionObjects[indexPath.row]
return cell
}
func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return objectsArray[section].sectionObjects.count
}
func numberOfSectionsInTableView(tableView: UITableView) -> Int {
return objectsArray.count
}
func tableView(tableView: UITableView, titleForHeaderInSection section: Int) -> String? {
return objectsArray[section].sectionName
}
func callAPI () {
//SwiftSpinner.show("Sending request..")
Alamofire.request(.POST, "http://www.picknget.com/webservice/index.php/Home/get_all_category")
.responseJSON { response in
if let value = response.result.value {
let json = JSON(value)
if let _statusCode = json["status"].string {
print("the ststus code is ", _statusCode)
if (_statusCode == "1"){
self.parseJSON(json)
}
else {
self.callAlert("Alert", _msg: "Something Went Wrong Kindly Check Your Connection & Try Agian")
}
}
//print ("json result ", json)
}
}.responseString { response in
//print("response ",response.result.value)
}
}
func parseJSON(json: JSON) {
for result in json["category"].arrayValue {
print("The available categories are",result["MainCatName"].stringValue)
self.categoriesArr.append(result["MainCatName"].stringValue)
}
print("@@@@@@@@")
objectsArray[2].sectionObjects = categoriesArr
print(categoriesArr.count)
print(categoriesArr[0],categoriesArr[1])
dispatch_async(dispatch_get_main_queue(),{
self.menuTableview.reloadData()
});
}
至少检查2个字母并带有正面预测。