Javascript 正则表达式以获取完整的可选部分(如果存在)
我需要验证输入的订单号是原件还是副本 订单号可以有数字或字符,并且必须是13Javascript 正则表达式以获取完整的可选部分(如果存在),javascript,regex,Javascript,Regex,我需要验证输入的订单号是原件还是副本 订单号可以有数字或字符,并且必须是13([A-Z0-9]{13}) 一个副本,用破折号隔开,并加上一个大写字母([-]{1}[A-Z]{1}) 鉴于用户可以输入原始订单或副本订单,副本可以存在,也可以不存在,因此,到目前为止,我有这个 ([a-zA-Z0-9]{13})([-]{1}[A-Z]{1}){0,1} 它工作正常,但我有一个问题,验证当输入副本时,它是否已完成且正确 /([a-zA-Z0-9]{13})([-]{1}[A-Z]{1}){0,1}/
([A-Z0-9]{13})
一个副本,用破折号隔开,并加上一个大写字母([-]{1}[A-Z]{1})
鉴于用户可以输入原始订单或副本订单,副本可以存在,也可以不存在,因此,到目前为止,我有这个
([a-zA-Z0-9]{13})([-]{1}[A-Z]{1}){0,1}
它工作正常,但我有一个问题,验证当输入副本时,它是否已完成且正确
/([a-zA-Z0-9]{13})([-]{1}[A-Z]{1}){0,1}/.test("ABCDEFGKLM123") // true
/([a-zA-Z0-9]{13})([-]{1}[A-Z]{1}){0,1}/.test("ABCDEFGKLM123-A") // true
/([a-zA-Z0-9]{13})([-]{1}[A-Z]{1}){0,1}/.test("ABCDEFGKLM123-AA") // true. Should return false!
/([a-zA-Z0-9]{13})([-]{1}[A-Z]{1}){0,1}/.test("ABCDEFGKLM123-") // true. Should return false!
/([a-zA-Z0-9]{13})([-]{1}[A-Z]{1}){0,1}/.test("ABCDEFGKLM123A") // true. Should return false!
我在正确验证最后3个场景时遇到问题
/([a-zA-Z0-9]{13})([-]{1}[A-Z]{1}){0,1}/.test("ABCDEFGKLM123") // true
/([a-zA-Z0-9]{13})([-]{1}[A-Z]{1}){0,1}/.test("ABCDEFGKLM123-A") // true
/([a-zA-Z0-9]{13})([-]{1}[A-Z]{1}){0,1}/.test("ABCDEFGKLM123-AA") // true. Should return false!
/([a-zA-Z0-9]{13})([-]{1}[A-Z]{1}){0,1}/.test("ABCDEFGKLM123-") // true. Should return false!
/([a-zA-Z0-9]{13})([-]{1}[A-Z]{1}){0,1}/.test("ABCDEFGKLM123A") // true. Should return false!
我仍在试图找出如何做到这一点,如果可选部分存在,那么它在这里是完整和正确的这里有一些问题。首先,你不需要
{0,1}
对于可选情况,你可以简单地使用?
和[-]{1}
可以-
也[A-Z]{1}
到[A-Z]
。此外,您还需要使用开始和结束锚来从开始到结束匹配字符串,以避免匹配某些字符串,如ABCDEFGKLM123-AA
^([a-zA-Z0-9]{13})(-[A-Z])?$
参见演示这里有一些问题。首先,您不需要
{0,1}
作为可选案例,您可以简单地使用?
和[-]{1}
可以是-
也[A-Z]{1}
到[A-Z]
。此外,您还需要使用开始和结束锚来从开始到结束匹配字符串,以避免匹配某些字符串,如ABCDEFGKLM123-AA
^([a-zA-Z0-9]{13})(-[A-Z])?$
请参见演示尝试此正则表达式
(^[a-zA-Z0-9]{13}(?:[-]{1}[A-Z]{1}){0,1}$)
试试这个正则表达式
(^[a-zA-Z0-9]{13}(?:[-]{1}[A-Z]{1}){0,1}$)
@m、 塞基拉欢迎;)令人惊叹的!谢谢,工作完美,如此简单,看起来我错过了游戏的开始和结束@m、 塞基拉欢迎;)令人惊叹的!谢谢,工作完美,如此简单,看起来我错过了游戏的开始和结束!太棒了,这一个工作得很好,就像卡斯拉姆夫的一样。很遗憾,我不能把这两个都作为我问题的正确答案,谢谢!!太棒了,这一个工作得很好,就像卡斯拉姆夫的一样。很遗憾,我不能把这两个都作为我问题的正确答案,谢谢!!