使用 PCRE 的智利 RUT/RUN 的正则表达式

问题描述 投票:0回答:5

我在使用 PCRE 中的正则表达式验证智利 RUT/RUN 时遇到问题。我有下一个正则表达式,但遗憾的是不能让它工作:

\b[0-9|.]{1,10}\-[K|k|0-9]

我需要帮助看看代码有什么问题。我需要使用的应用程序只使用PCRE。

谢谢。

regex pcre
5个回答
6
投票

你可以使用

^(\d{1,3}(?:\.\d{1,3}){2}-[\dkK])$

匹配和捕获(这通常不是必需的,但您的应用程序需要一个捕获组来提取其内容)匹配模式的整个字符串。请参阅正则表达式演示

要在较大字符串中匹配与此模式匹配的较短字符串,您可以删除

^
$
(参见 demo)或使用
\b
单词边界(参见 this demo)。

详情:

  • ^
    - 字符串的开始
  • \d{1,3}
    - 1 到 3 位数
  • (?:\.\d{1,3}){2}
    - 2 个文字序列
    .
    和 1 到 3 个数字
  • -
    - 连字符
  • [\dkK]
    - 一个数字,
    k
    K
    .
  • $
    - 字符串结尾。

1
投票

因为他们有时会省略点,所以我用了这个:

^(\d{1,2}(?:[\.]?\d{3}){2}-[\dkK])$

详情:

  • ^ - 字符串的开始
  • \d{1,2} - 1 或 2 位数字
  • (?:[.]?\d{3}){2} - 可选 '.' 的 2 个序列和 3 位数字
  • - 一个连字符
  • [\dkK] - 一个数字,k 或 K
  • $ - 字符串结尾

1234567-k 好

12345678-k 好

1.234.567-k 好

12.345.678-k 好

已知问题: 12.345678-k 和 12345.678-k 仍然可以,我不喜欢这样 :(


0
投票

您需要更改为

^(\d{1,3}(?:\.\d{3}){2}-[\dkK])$
以在第一个1-3位数字序列之后仅捕获2个3位数字序列。


0
投票

没有分数的RUT:

^[1-9]\d*\-(\d|k|K)$

例子:

  • 3403231-9 好
  • 03403231-9 错了
  • 003403231-9 错了

RUT 用点分隔:

^([1-9]|[1-9]\d|[1-9]\d{2})(\.\d{3})*\-(\d|k|K)$

例子:

  • 3.403.231-9 好
  • 3.403.231-9 好
  • 13.571.187-K 好
  • 13.571.187-k 好
  • 3.4032.31-9 错误
  • 03.403.231-9 错误
  • 003.403.231-9 错误
  • 013.571.187-k 错误
  • .403.231-9 错误
  • 0.403.231-9 错误

RUT 用点分隔或 RUT 不带点:

^([1-9]|[1-9]\d|[1-9]\d{2})((\.\d{3})*|(\d{3})*)\-(\d|k|K)$

例子:

  • 3403231-9 好
  • 03403231-9 错了
  • 003403231-9 错了
  • 3.403.231-9 好
  • 3.403.231-9 好
  • 13.571.187-K 好
  • 13.571.187-k 好
  • 3.4032.31-9 错误
  • 03.403.231-9 错误
  • 003.403.231-9 错误
  • 013.571.187-k 错误
  • .403.231-9 错误
  • 0.403.231-9 错误

注:

  • 正则表达式考虑了RUT开头不能有零的情况。

-1
投票

请考虑在 REGEX 构建中更加具体,因为它匹配了错误的数字,例如 17.87.335-2。此外,包含的格式不匹配没有点或连字符的格式。

请考虑使用以下格式:(\d{1,3}(?:(.?)\d{3}){2}(-?)[\dkK])

修改之前的版本以尝试其他格式:https://regex101.com/r/2Us0j6/9

© www.soinside.com 2019 - 2024. All rights reserved.