-1

我正在为学习 JavaScript 基础的 1 级 uni 学生准备一个简短的教程。任务是验证电话号码。该号码不得包含非数字,并且长度必须为 14 位或更少。以下代码摘录是我想出的,我想让它尽可能可读。

if (
    //set of rules for invalid phone number
        phoneNumber.length == 0 //empty
    ||  phoneNumber.length > 14 //too long
    ||  /\D/.test(phoneNumber) //contains non-digits
) {
    setMessageText(invalid);
} else {
    setMessageText(valid);
}

一个我不能完全回答自己的简单问题,想听听您的意见:如何定位周围(最外面的)括号?很难看出普通括号和大括号之间的区别。你通常把最后)一个条件和最后一个条件放在同一行吗?您是否将第一个开口保持(在一条线上?您是否也将每个单独的子条件括在括号中?您是将第一个(与最后一个水平对齐),还是将最后一个)if?

您是保留) {在单独的行上,还是将最后)一个与最后一个子条件放在同一行,然后将开口{放在新行上?或者你只是把它) {和最后一个子条件放在同一行?

社区维基。

编辑 请仅发表关于括号的使用和放置的意见。代码不需要重构。这适用于几周前才接触 JavaScript 的人。我不是在征求意见如何编写代码以使其更短或性能更好。我只想知道如何在 IF 条件周围放置括号。

4

3 回答 3

5

我会将验证电话号码的逻辑重构为一个函数:

function isValidPhoneNumber(phone) {
  if (phone.length == 0) return false;
  if (phone.length > 14) return false;
  return !/\D/.test(phone);
}

或者您也可以使用正则表达式来检查长度:

function isValidPhoneNumber(phone) {
  return /^\d{1,14}$/.test(phone);
}

使用验证电话号码的功能,代码变得更简单:

if (isValidPhoneNumber(phoneNumber)) {
  setMessageText(valid);
} else {
  setMessageText(invalid);
}

甚至:

setMessageText(isValidPhoneNumber(phoneNumber) ? valid : invalid);
于 2010-03-13T13:42:07.853 回答
1
message = invalid
if(phoneNumber.length > 0 && phoneNumber < 14 && /\D/.test(phonenumber)){
  message = valid
}
setMessageText(message)

本质上,在被证明有效之前无效更安全,但这完全是主观的。

还:

if(...){
}

总是比:

if(...)
{

}

在 javascript 中 - 这是因为分号插入,这在此处可能不是问题,但在其他情况下可能是问题,因此在使用该语言时最好保持相同的习惯。

最后,我不会用比我必须的更多的括号来重载代码,尤其是当事情都是“与”时——当有混合的运算符优先级时,包含额外的括号很重要,因为不是每个人都想考虑在阅读代码时。

不过,这有点主观。对不起。

于 2010-03-13T13:39:06.923 回答
1

tuh-may-toe

脚趾-MAH-tuh

除非有奇怪的习惯,“可读”是你习惯看到的

我会像这样格式化你的例子:

//set of rules for invalid phone number:
//    - not empty
//    - not too long (14 characters)
//    - can contain only digits
if (phoneNumber.length == 0 ||
    phoneNumber.length > 14 ||
    /\D/.test(phoneNumber))
{ 
    setMessageText(invalid); 
}
else 
{ 
    setMessageText(valid); 
} 

因为我更喜欢看到一起解释的逻辑,而不是散布在代码语句上。而且我喜欢将大括号单独放在一条线上,以使积木更加突出。

但是 - 正如其他人所指出的 - 为了这个例子的“终极”可读性,它应该被重构为至少一个isValidPhoneNumber函数

于 2010-03-13T14:32:35.490 回答