在JavaScript中,我需要在不使用正则表达式的情况下验证电话号码(必须使用字符串操作)。电话号码必须采用以下格式之一:
如果电话号码不是上面列出的格式之一,我还必须提供提醒。
我只能设法让#2工作,看起来像这样:
function len(gth)
{
if (gth.value.length != 10)
{
alert("Telephone numbers MUST be 10 digits!");
}
}
在HTML中它将调用函数:
<p>Phone: <input id = "phone" onblur="len(this)" name = "Phone" size = "20" type = "text" maxlength = "10"> </p>
答案 0 :(得分:1)
由于你需要一个没有正则表达式的解决方案,我相信这应该可行。
const phones = [
'123-456-7890',
'1234567890',
'(123)4567890',
'(123)456-7890',
'+61(123) 456-7890',
'12345',
'))))01/34$89.77(99'
]
function len(gth) {
if (gth.substring(3, 4) == '-' && gth.substring(7, 8) == '-') // 123-456-7890
gth = gth.replace('-', '').replace('-', '');
else if (gth.substring(0, 1) == '(' && gth.substring(4, 5) == ')' && gth.substring(8, 9) == '-') // (123)456-7890
gth = gth.replace('(', '').replace(')', '').replace('-', '');
else if (gth.substring(0, 1) == '(' && gth.substring(4, 5) == ')') // (123)4567890
gth = gth.replace('(', '').replace(')', '');
if (!isNaN(gth) && gth.length == 10) {
return true;
}
alert("Telephone numbers:" + gth + " MUST be 10 digits!");
}
phones.forEach(len)
&#13;
答案 1 :(得分:1)
我会用x
之类的内容替换数字,然后检查预定义的模式:
function check(num) {
let pattern = '';
for (let i = 0; i < num.length; i++) {
pattern += num[i] >= '0' && num[i] <= '9' ? 'x' : num[i];
}
return ['xxx-xxx-xxxx', 'xxxxxxxxxx', '(xxx)xxxxxxx', '(xxx)xxx-xxxx']
.indexOf(pattern) >= 0;
}
如需额外学分,请在上述课程中找到错误。
但是,你真的不需要做任何这些。您应该能够使用input
元素上的pattern
属性。这也将提供更好的用户体验。例如,您可以使用:invalid
伪类对输入元素进行样式设置,例如在其周围放置一个红色边框,以便为用户提供其输入无效的实时反馈。是的,这需要一个正则表达式 - 你不想再次使用正则表达式的原因是什么?
答案 2 :(得分:0)
您可以手动设置:
答案 3 :(得分:0)
Basic example将输入数据提取到数组
function test() {
var phnTest = document.getElementById('phone').value;
var strArray = [];
strArray = phnTest.split('');
document.getElementById('p').innerHTML = strArray;
}
&#13;
<form action="demo_form.asp">
Phone <input id="phone" type="text" name="phone"><br>
<input type="button" value='Submit' onclick="test()">
</form>
<p id='p'></p>
&#13;
这取决于数据的结构,如果您需要搜索文本正文等,但基础知识将是......
如果它是<input>
的简单拉动,请抓取数据......
获取输入数据,并为每个字符生成一个数组。然后你可以用strArray[3]
来测试一个破折号或一个点。如果不存在,它可以继续检查连续七个数字,依此类推。
这将非常耗费并且需要检查许多条件。我假设没有RegEx&#34;&#34;是项目的要求,如果没有,建议学习和使用RegEx。
希望这能让你前进。
答案 4 :(得分:0)
这是我的尝试。关键是从字符串创建一个数组,然后过滤掉任何非数字字符。但是使用正则表达式会更容易。只是
number.replace(/(\D+)/g, '')
const numbers = [
'123-456-7890',
'1234567890',
'(123)4567890',
'(123)456-7890',
'+61(123) 456-7890',
'12345',
'))))01/34$89.77(99'
]
// validate a phone number
function validate(number) {
const digits = clean(number)
console.log({
number,
digits,
length: digits.length,
pass: digits.length === 10
})
}
// remove any non digits from the number
function clean(number) {
return Array.from(number).filter(char => {
return !isNaN(char) && char !== ' '
}).join('')
}
numbers.forEach(validate)
&#13;