如何对字符串进行正则表达式

How to Regex a string

是否可以使用正则表达式进行检查:

  1. 完整的字符串是数字AND
  2. 第一个字符是 7 或 8 那么字符串的完整长度必须是 11 OR
  3. 第一个字符是1那么字符串的完整长度必须是10
  4. OR 第一个字符是 0 然后是字符串的完整长度 必须是 18 AND 在字符 8 上必须是 8 或 7 OR 在字符 9 上 必须是 1

希望你能明白我的意思。希望这些例子能帮助你明白我的意思。

这是我的解决方案(不完全有效->我不知道如何检查如果它以 0 开头并且它有 18 个字符长,位置 8 上的字符必须是 7 或 8 或者位置 9 上的字符字符必须是 1):

^(?:[78]\d{10}|[1-69]\d{9}|[0]/d{18})$

例如:

谢谢!

这是正则表达式: /^[78]\d{10}$/

"^"表示行首 “$”表示行尾 \d 表示数字 {10}表示恰好 10 []是一组有效值

第二个问题取决于您的引擎是否支持 Lookahead 和 Lookbehind https://www.regular-expressions.info/conditional.html

你可以使用

^(?:[78]\d{10}|1\d{9}|0\d{6}(?:[87]\d|\d1)\d{9})$

regex demo

详情

  • ^ - 字符串开头
  • (?:[78]\d{10}|1\d{9}|0\d{6}(?:[87]\d|\d1)\d{9}) - 三种选择之一:
    • [78]\d{10} - 78 然后 10 位数字(总共 11 个)
    • | - 或
    • 1\d{9} - 1 然后9位数(一共10个)
    • | - 或
    • 0\d{6}(?:[87]\d|\d1)\d{9} - 0,然后是6位,然后第8位等于87和任意一位,或者任意一位和第9位数字等于 1,然后是另外 9 位(=18 位)
  • $ - 字符串结尾。