Kotlin中带可选前缀的电话号码正则验证:+1转义失效
电话号码正则验证解决方案
针对你需要验证的三种电话号码格式:
- +1(061)235-663
- 1(061)235-663
- (061)235-663
你遇到的+1转义问题,本质是正则结构和Kotlin字符串转义细节导致的,修正后的正则如下:
val regex = """^(?:\+1|1)?\(\d{3}\)\d{3}-\d{3}$""".toRegex()
关键说明:
- Kotlin三重引号字符串的转义规则:三重引号属于原始字符串,正则中的元字符(如
+、()只需用单个反斜杠转义即可,所以\+能正确匹配字面量+,不需要额外添加反斜杠。 - 正则结构优化:
^和$强制整个字符串完全匹配,避免出现部分匹配的无效情况。(?:\+1|1)?用非捕获组(?:)定义可选前缀,?表示前缀可出现0次或1次,同时支持+1、1以及无前缀的格式。\(\d{3}\)匹配带括号的三位区号,\d{3}-\d{3}匹配后续的号码部分。
如果需要保留原有的其他验证规则(如\d{3}([-.])\d{3}\1\d{4}或\d{10}),可以把所有分支统一包裹在^和$内,避免分支间的匹配冲突:
val regex = """^(?:\d{3}([-.])\d{3}\1\d{4}|\d{10}|(?:\+1|1)?\(\d{3}\)\d{3}-\d{3})$""".toRegex()
内容的提问来源于stack exchange,提问作者Santhucool
相关产品推荐
相关产品推荐

