我想在JavaScript中为字符串创建一个RegExp验证,它可以包含3个部分:
P1-P2-P3
遵守以下规则:
34
已经是有效字符串,或34-6565
或566-233455-23232
)。目前我有这个,但我错过了整个字符串长度,我不知道如何定义可选部分:
/^.\d{1,13}-\d{1,13}-\d{1,13}$/
以下是一些有效的条目:5656,33434-2323-45,12-4345-12,1234567890123-123456,1234567890123-12-56
无效条目:34453454351234566787,1234567890123-1234567890123,2345-233-123-3434,34sd1322-23,31234as,...
答案 0 :(得分:2)
答案 1 :(得分:0)
试试这个:
/(^\d{1,13}(-\d{1,13})?(-\d{1,13})?$){1,20}/
?
表示0或1,因此这对可选部分很有用。
{1,20}
在整个字符串的末尾检查它不会超过20。
答案 2 :(得分:0)
/^(?!.{21,})\d{1,13}(-\d{1,13}){0,2}$/
(?!.{21,})
开头 - 负前瞻意思:不超过20个字符。
答案 3 :(得分:0)
(\d{1,13}-){0,2}(\d{1,13})
匹配两组数字,长度最多为13位,后跟短划线,然后是一组长度最多为13位的数字。这种方法是可扩展的,因为您只需要在第一个捕获组之后更改数字,以更改所需的数字部分数量。如果字符串的长度合适,我会建议您通过代码检查,然后再通过正则表达式进行验证。它会更快,更具可读性。
示例:http://regex101.com/r/wI7uX1
您也可以通过Javascript执行此操作,它可能会更快:http://jsfiddle.net/sauYY/
答案 4 :(得分:0)
总字符串长度检查必须分开;其余的可以用正则表达式完成:
var re = /^\d{1,13}(?:\-\d{1,13}){0,2}$/;
if (str.length <= 20 && str.match(re)) {
// valid
}
答案 5 :(得分:0)
试试这个:
/^(?=.{0,20}$)\d{1,13}(-\d{1,13}){0,2}$/
描述:
^ beginning of the input
(?=.{0,20}$) followed by any char, 0 or 20 times, + end of the input
\d{1,13} a digit, 1 or 13 times
(-\d{1,13}){0,2} a dash + same as above, 0 or 2 times
$ end of the input
有关正则表达式的更多信息:http://www.javascriptkit.com/javatutors/redev.shtml。