【问题标题】:Complex regex in AngularJS controllerAngularJS 控制器中的复杂正则表达式
【发布时间】:2017-02-14 18:29:08
【问题描述】:

我正在尝试在我的 AngularJS 控制器中添加一个正则表达式,以验证文本输入框中的以下四个条件: A)name (space) name,B)name,(comma) name,C)123456789(最多 9 位)D)123-45-6789

我创建了以下正则表达式: 1) 验证:/^[a-zA-Z0-9 ,\-]+[(?<=\d\s]([a-zA-Z0-9]+\s)*[a-zA-Z0-9]+$ /,

除了格式化最后四位数字并将数字限制为最多九个字符之外,这与我想要的很接近。

我还尝试根据我的研究组合以下正则表达式,但无济于事: 2) 验证:/^([0-9]{8,9})$/ + /^([A-z'\/-])+[\s]+([A-z'\/-])+$/ + /^([A-z'\/-])+[\s]*[\,]{1}[\s]*([A-z-\/'])+$/ + /^\d{3}-\d{2}-\d{4}$/,

3) 验证:/^([0-9]{8,9})$/ | /^([A-z'\/-])+[\s]+([A-z'\/-])+$/ | /^([A-z'\/-])+[\s]*[\,]{1}[\s]*([A-z-\/'])+$/ | /^\d{3}-\d{2}-\d{4}$/,

4) 验证:new RegExp('(' + /^([0-9]{8,9})$/ + ") | (" + /^([A-z'\/-])+[\s]+([A-z'\/-])+$/ + ") | (" + /^([A-z'\/-])+[\s]*[\,]{1}[\s]*([A-z-\/'])+$/ + ") | (" + /^\d{3}-\d{2}-\d{4}$/ + ')'),

我有三个问题:

  • 是否可以创建一个验证这四个条件的正则表达式?

  • 我没有正确组合这些吗?

  • 或者我应该放弃这个正则表达式任务,只创建一个单独的函数来执行我的验证?

【问题讨论】:

  • 也许我理解错了,但为什么不将它们与 |工作吗?
  • 我认为它会起作用,但由于某种原因,系统似乎在 | 之后忽略了正则表达式符号
  • 可能是因为您的第一个正则表达式有未闭合的括号?
  • 谢谢,我不确定我是否理解,'(' + /^([0-9]{8,9})$/ + ") 不是右括号吗?

标签: javascript angularjs regex validation


【解决方案1】:

这应该适合你:^([a-zA-Z]+(?:-\/)?[,\/]?\s+[a-zA-Z]+(?:-\/)?|\d{1,9}|\d{3}-\d{2}-\d{4})$

const validate = input => /^^([a-zA-Z]+(?:-\/)?[,\/]?\s+[a-zA-Z]+(?:-\/)?|\d{1,9}|\d{3}-\d{2}-\d{4})$/.test(input)

const testData = ["123", "name space", "John Doe", "John/ Doe", "Doe, John", "John", "name, ", "John   Doe", "John-/   Doe", "John-/, Doe-/", "sdf", "123-45-6789", "1234567890" ,"name , surname"]
for (const input of  testData){
  console.log(`${input} ${validate(input)}`)
}

【讨论】:

  • 这确实很酷,但它允许处理一个名称。所以约翰应该是无效的标准,但约翰史密斯或史密斯,约翰应该是好的。
  • @Eddie 马上就会修复它
  • @Eddie 现在它已按照您的要求进行了修复,但我有一个问题,它必须是一个空格或一个或多个空格?
  • 这是个好问题。姓名或 Smith, John 之间只允许有一个空格。
  • @Eddie 检查现在应该没问题
【解决方案2】:

你可以去

^(?:(?:[a-z]+,?[ ]+[a-z]+)|(?:\d{3}-\d{2}-\d{4})|(?:\d+))$

a demo on regex101.com


拆开来看,上面写着:
^                          # match beginning of the line
(?:                        # non-capturing parenthesis
    (?:[a-z]+,?[ ]+[a-z]+) # a-z then comma (optional) space then a-z again
    |                      # or
    (?:\d{3}-\d{2}-\d{4})  # the number format with dashes
    |                      # or
    (?:\d+)                # only numbers
)
$                          # match the end of the line

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-02-21
    • 2017-07-11
    • 2015-02-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-08-11
    • 1970-01-01
    相关资源
    最近更新 更多