用于全名和电话的 JS 正则表达式

问题描述

你能帮我用正则表达式吗:

  1. 全名 - 可以是英语或希伯来语 [\u0590-\u05FF]-这是希伯来语字母范围。

    必须是2个或更多词, 每个单词至少包含一个字母 (不区分大小写)

示例:Roei Grin,R G,roei grin,r G,roei gr in,

“רועי גרין”、“רו ג”、רועי גרי ן”

  1. 电话号码- 必须是 10 位数字。 必须从 0 开始 可以(不是必须)在第三或第四位有“-”字符。 示例:0549129393、058-9210348、0266-391059

解决方法

这是两者的解决方案。名称和数字有很好的例子,其次是坏的例子:

const testNames = [
  'Roei Grin','R G','roei grin','r G','roei gr iN','רועי גרי ן','רו ג','רועי גרין','Bad'
];
const testNumbers = [
  '0549129393','058-9210348','0266-391059','1111','011111111','0999999-999','09999999999'
];
const nameRegex = /^[a-zA-Z\u0590-\u05FF]+( [a-zA-Z\u0590-\u05FF]+)+$/;
const numberRegex = /^0(\d{9}|\d{2}-\d{7}|\d{3}-\d{6})$/;

console.log('testNames:')
testNames.forEach(str => {
  console.log('- "' + str + '"  ==> ' + nameRegex.test(str));
});
console.log('testNumbers:')
testNumbers.forEach(str => {
  console.log('- "' + str + '"  ==> ' + numberRegex.test(str));
});

输出:

testNames:
- "Roei Grin"  ==> true
- "R G"  ==> true
- "roei grin"  ==> true
- "r G"  ==> true
- "roei gr iN"  ==> true
- "רועי גרי ן"  ==> true
- "רו ג"  ==> true
- "רועי גרין"  ==> true
- "Bad"  ==> false
testNumbers:
- "0549129393"  ==> true
- "058-9210348"  ==> true
- "0266-391059"  ==> true
- "1111"  ==> false
- "011111111"  ==> false
- "0999999-999"  ==> false
- "09999999999"  ==> false

nameRegex 的解释:

  • ^ ... $ - 字符串开头和结尾的锚点
  • [a-zA-Z\u0590-\u05FF]+ - 以 1 个以上的字母和/或希伯来语字符开头
  • ( [a-zA-Z\u0590-\u05FF]+)+ - 后跟 1+ 个模式:单个空格,后跟 1+ 个字母和/或希伯来语字符

numberRegex 的解释:

  • ^ ... $ - 字符串开头和结尾的锚点
  • 0 - 以 0 开头
  • (\d{9}|\d{2}-\d{7}|\d{3}-\d{6}) - 后跟:
    • 9 位数字
    • 或 2 位数字,-,7 位数字
    • 或 3 位数字,-,6 位数字
,

你可以使用,这个 reg exp 用于你的面具手机 - ^[0]{1}(([\d]{2}[-]{0}[\d]{7})|([\d]{3}[-]{1}[\d]{6})|([\d]{2}[-]{1}[\d]{7}))

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...